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

dw1jzc5e  于 2023-09-29  发布在  Python
关注(0)|答案(8)|浏览(120)

好像

if not mylist[1]:
    return False

坏了

lvjbypge

lvjbypge1#

你只需要检查你想要的索引是否在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,即使列表中实际存在一个元素。

brqmpdu1

brqmpdu12#

在Python的EAFP风格中:

try:
    mylist[1]
except IndexError:
    print "Index doesn't exist!"
a2mppw5e

a2mppw5e3#

在整数索引列表的情况下,我只需要

if 1 < len(mylist):
  ...

对于字典,你当然可以做

if key in mydict:
  ...
ql3eal8s

ql3eal8s4#

另一种(但速度较慢)方法:

if index not in range(len(myList)):
    return False

当考虑到负索引时,它会变得更加冗长:

if index not in range(-len(myList), len(myList)):
    return False
9ceoxa92

9ceoxa925#

assert len(mylist) >= abs(index) + int(index >= 0), "Index out of range"

assert len(mylist) > abs(index) - int(index < 0), "Index out of range"
ilmyapht

ilmyapht6#

或者你可以这样做:

if index in dict(enumerate(mylist)):
    return True

尽管它的效率可能比range(len(mylist))还要低。也许有人应该为列表提出一个keys()方法,它返回PEP中键的范围。

c9x0cxw0

c9x0cxw07#

以下方法返回index == 0和负索引值的True结果(如果这样的索引对列表有效,例如[0, 1, 2]listIn[-2]):

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
wnvonmuf

wnvonmuf8#

首先,考虑边界条件。
1.长度为l的列表的最大有效索引是l-1;从0开始,定义l个元素。

  1. l列表的最小有效索引是-l;从-1开始,这又定义了l元素。
    在原问题的上下文中,由此产生的表达:
isValidIndex = lambda l, i: -len(l) <= i < len(l)

if not isValidIndex(myList, 1):
  return False

请注意,空数组(长度为0)中 * 没有 * 个有效索引,并且此属性在此处保留-没有i满足0 <= i < 0

相关问题