在 Python 中安全地获取列表项
Safely get list items in Python
要安全地获取列表项:
try/except
访问语句中的列表项。- 如果
IndexError
引发 an,则返回默认值。 - 如果未引发错误,则返回指定索引处的列表项的值。
主程序
def safe_list_get(li, index, default_value=None): try: return li[index] except IndexError: return default_value my_list = ['bobby', 'hadz', 'com'] print(safe_list_get(my_list, 0)) # 👉️ bobby print(safe_list_get(my_list, 10)) # 👉️ None print(safe_list_get(my_list, 10, 'default')) # 👉️ default print(safe_list_get(my_list, -3)) # 👉️ bobby print(safe_list_get(my_list, -10)) # 👉️ None print(safe_list_get(my_list, -10, 'default')) # 👉️ default
我们创建了一个可重用的函数,它接受一个列表、一个索引和一个可选的默认值。
在try
语句中,我们尝试访问指定索引处的列表元素。
如果索引存在,则返回该项目。
如果索引不存在,IndexError
则引发 an 然后在
except
块中处理。
主程序
my_list = ['bobby', 'hadz', 'com'] # ⛔️ IndexError: list index out of range print(my_list[25])
如果索引超出范围,我们返回默认值。
默认值设置为,
None
除非用户在函数调用中提供第三个参数。主程序
def safe_list_get(li, index, default_value=None): try: return li[index] except IndexError: return default_value my_list = ['bobby', 'hadz', 'com'] print(safe_list_get(my_list, 10)) # 👉️ None print(safe_list_get(my_list, 10, 'default')) # 👉️ default
这种方法也可用于使用负索引安全地访问列表元素。
主程序
def safe_list_get(li, index, default_value=None): try: return li[index] except IndexError: return default_value my_list = ['bobby', 'hadz', 'com'] print(safe_list_get(my_list, -3)) # 👉️ bobby print(safe_list_get(my_list, -10)) # 👉️ None print(safe_list_get(my_list, -10, 'default')) # 👉️ default
负索引可用于向后计数,例如my_list[-1]
返回列表中的最后一项并my_list[-2]
返回倒数第二项。
或者,您可以在访问列表项之前检查列表的长度。
使用 len() 安全地获取列表项
要安全地获取列表项:
- 检查提供的索引是否存在。
- 如果索引存在,则访问索引处的列表。
- 如果索引不存在,则返回默认值。
主程序
def safe_list_get(li, index, default_value=None): return li[index] if -len(li) <= index < len(li) else default_value my_list = ['bobby', 'hadz', 'com'] print(safe_list_get(my_list, 0)) # 👉️ bobby print(safe_list_get(my_list, 10)) # 👉️ None print(safe_list_get(my_list, 10, 'default')) # 👉️ default print(safe_list_get(my_list, -3)) # 👉️ bobby print(safe_list_get(my_list, -10)) # 👉️ None print(safe_list_get(my_list, -10, 'default')) # 👉️ default
我们if/else
在函数中使用了内联语句。
该if
语句检查列表的否定长度是否小于或等于指定的索引。
这对于处理负指数是必要的,例如-5
.
如果列表的长度为3
,则列表中最大的负索引为-3
。
换句话说,列表中最大的负索引等于。
-len(my_list)
该if
语句还检查指定的索引是否小于列表的长度。
Python 索引是从零开始的,因此列表中的第一项的索引为,最后一项的索引为或。
0
-1
len(my_list) - 1
列表中的最后一项的索引始终为len(my_list) - 1
,因此如果索引小于列表的长度,我们应该只在索引处访问列表。
如果满足条件,则返回指定索引处的列表项,否则返回默认值。
您选择哪种方法是个人喜好的问题。我会使用
try/except
语句,因为我发现它很容易阅读且直观。