似乎好像
if not mylist[1]:
return False
不起作用。
答案 0 :(得分:31)
你只需要检查你想要的索引是否在0
的范围内以及列表的长度,就像这样
if 0 <= index < len(list):
实际上内部评估为
if (0 <= index) and (index < len(list)):
因此,该条件检查索引是否在[0,列表长度]范围内。
注意: Python支持负索引。引用Python documentation,
如果
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 value。然后not
会否定它,因此if
条件将被评估为Truthy。因此,它将返回False
,即使元素实际存在于列表中。
答案 1 :(得分:6)
以EAFP样式的Python:
try:
mylist[1]
except IndexError:
print "Index doesn't exist!"
答案 2 :(得分:3)
对于整数索引列表,我只需要
if 1 < len(mylist):
...
对于dicts,您当然可以
if key in mydict:
...
答案 3 :(得分:0)
替代方法(但速度稍慢):
if index not in range(len(myList)):
return False
考虑负指标时,它会变得更加冗长:
if index not in range(-len(myList), len(myList)):
return False