如何检查列表索引是否存在?

时间:2015-04-18 09:37:47

标签: python list

似乎好像

if not mylist[1]:
    return False

不起作用。

4 个答案:

答案 0 :(得分:31)

你只需要检查你想要的索引是否在0的范围内以及列表的长度,就像这样

if 0 <= index < len(list):

实际上内部评估为

if (0 <= index) and (index < len(list)):

因此,该条件检查索引是否在[0,列表长度]范围内。

注意: Python支持负索引。引用Python documentation

  

如果ij为负数,则索引相对于字符串的结尾:len(s) + ilen(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]:

让我们说1mylist的有效索引,如果它返回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