繁体   English   中英

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

[英]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 文档

如果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值 然后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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM