[英]How can I check if a list index exists?
好像
if not mylist[1]:
return False
不起作用。
您只需要检查所需的索引是否在0
的范围内以及列表的长度,如下所示
if 0 <= index < len(list):
它实际上是内部评估的
if (0 <= index) and (index < len(list)):
因此,该条件检查索引是否在[0,列表长度]范围内。
注意: Python支持负索引。 引用Python 文档 ,
如果
i
或j
为负数,则索引相对于字符串的结尾:len(s) + i
或len(s) + j
被替换。 但请注意-0仍为0。
这意味着无论何时使用负索引,该值都将添加到列表的长度,并将使用结果。 因此, list[-1]
将为您提供元素list[-1 + len(list)]
。
因此,如果您想允许负索引,那么您只需检查索引是否不超过列表的长度,就像这样
if index < len(list):
另一种方法是,除了IndexError
之外,就像这样
a = []
try:
a[0]
except IndexError:
return False
return True
当您尝试访问无效索引处的元素时,会引发IndexError
。 所以,这种方法有效。
注意:您在问题中提到的方法存在问题。
if not mylist[1]:
假设1
是mylist
的有效索引,如果它返回Falsy值 。 然后not
否定它所以if
条件将被评估为Truthy。 因此,即使元素实际存在于列表中,它也将返回False
。
在EAFP风格的Python中:
try:
mylist[1]
except IndexError:
print "Index doesn't exist!"
在整数索引列表的情况下,我只是这样做
if 1 < len(mylist):
...
对于dicts,你当然可以
if key in mydict:
...
这样做的另一种方法(但有点慢):
if index not in range(len(myList)):
return False
在考虑负指数时,它会变得更加冗长:
if index not in range(-len(myList), len(myList)):
return False
assert len(mylist) >= abs(index) + int(index >= 0), "Index out of range"
或者
assert len(mylist) > abs(index) - int(index < 0), "Index out of range"
或者你可以这样做:
if index in dict(enumerate(mylist)):
return True
尽管 is 可能比range(len(mylist))
效率更低。 也许有人应该为列表提出一个 keys() 方法,该方法返回 PEP 中键的范围。
以下方法为index == 0
和负索引值(如果它们存在于列表中)返回True
结果:
def isInListRange(listIn, index):
""" Description: Function to detect if list index out of range
Import: from shared.isInListRange import isInListRange
Test: python -m shared.isInListRange
"""
try:
return True if (index == 0 and len(listIn) > 0) or listIn[index] else False
except:
return False
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.