Get value at list/array index or “None” if out of range in Python
如果索引在python中超出或范围,是否有清晰的方法获取列表索引或
显而易见的方法是:
1 2 3 4 | if len(the_list) > i: return the_list[i] else: return None |
但是,冗长的内容会降低代码的可读性。有没有一个干净,简单,一个衬垫可以代替?
尝试:
1 2 3 4 | try: return the_list[i] except IndexError: return None |
或者,一个衬里:
1 | l[i] if i < len(l) else None |
号
例子:
1 2 3 4 5 6 7 | >>> l=range(5) >>> i=6 >>> print(l[i] if i < len(l) else None) None >>> i=2 >>> print(l[i] if i < len(l) else None) 2 |
我发现列表切片很适合:
1 2 3 4 5 6 7 | >>> x = [1, 2, 3] >>> a = x [1:2] >>> a [2] >>> b = x [4:5] >>> b [] |
。
所以,如果你想要x[i],总是访问x[i:i+1]。您将得到一个包含必需元素(如果存在)的列表。否则,您将得到一个空列表。
1 | return the_list[i] if len(the_list) > i else None |
。
出于您的目的,您可以排除
1 2 | def return_ele(x, i): if len(x) > i: return x[i] |
结果
1 2 3 4 5 6 7 8 | >>> x = [2,3,4] >>> b = return_ele(x, 2) >>> b 4 >>> b = return_ele(x, 5) >>> b >>> type(b) <type 'NoneType'> |
。
如果处理的是小列表,则不需要添加if语句或类似的内容。一个简单的解决方案是将列表转换为dict,然后可以使用
1 2 | table = dict(enumerate(the_list)) return table.get(i) |
甚至可以使用
请注意,此方法不适用于负指数。