the*_*eye 32

你只需要检查你想要的索引是否0在列表的范围和长度,如下所示

if 0 <= index < len(list):
Run Code Online (Sandbox Code Playgroud)

它实际上是内部评估的

if (0 <= index) and (index < len(list)):
Run Code Online (Sandbox Code Playgroud)

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

注意: Python支持负索引.引用Python 文档,

如果ij为负数,则索引相对于字符串的结尾:len(s) + i或者len(s) + j被替换.但请注意-0仍为0.

这意味着无论何时使用负索引,该值都将添加到列表的长度,并将使用结果.所以,list[-1]会给你元素list[-1 + len(list)].

因此,如果您想允许负索引,那么您只需检查索引是否不超过列表的长度,就像这样

if index < len(list):
Run Code Online (Sandbox Code Playgroud)

除此之外IndexError,另一种方法是这样做

a = []
try:
    a[0]
except IndexError:
    return False
return True
Run Code Online (Sandbox Code Playgroud)

当您尝试访问无效索引处的元素时,IndexError会引发a.所以,这种方法有效.


注意:您在问题中提到的方法存在问题.

if not mylist[1]:
Run Code Online (Sandbox Code Playgroud)

假设1是一个有效的索引mylist,如果它返回一个Falsy值.然后not将否定它,所以if条件将被评估为Truthy.因此,False即使元素实际存在于列表中,它也会返回.


Ben*_*Ben 7

EAFP风格的Python中:

try:
    mylist[1]
except IndexError:
    print "Index doesn't exist!"
Run Code Online (Sandbox Code Playgroud)


csl*_*csl 5

如果是整数索引列表,我只会

if 1 < len(mylist):
  ...
Run Code Online (Sandbox Code Playgroud)

对于字典,您当然可以

if key in mydict:
  ...
Run Code Online (Sandbox Code Playgroud)