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
8条答案
按热度按时间lvjbypge1#
你只需要检查你想要的索引是否在
0
和列表长度的范围内,就像这样它实际上被内部评估为
因此,该条件检查索引是否在范围[0,列表长度]内。
**注意:**Python支持负索引。引用Python文档,
如果
i
或j
为负数,则索引相对于字符串的结尾:len(s) + i
或len(s) + j
被取代。但请注意,-0仍然是0。这意味着每当使用负索引时,该值将被添加到列表的长度中,并将使用结果。所以
list[-1]
会给出元素list[-1 + len(list)]
。所以,如果你想允许负索引,那么你可以简单地检查索引是否没有超过列表的长度,就像这样
另一种方法是,除了
IndexError
,像这样当您试图访问无效索引处的元素时,会引发
IndexError
。所以,这个方法有效。**注意:**您在问题中提到的方法有问题。
假设
1
是mylist
的有效索引,如果它返回一个Falsy值。然后not
将否定它,因此if
条件将被评估为Truthy。因此,它将返回False
,即使列表中实际存在一个元素。brqmpdu12#
在Python的EAFP风格中:
a2mppw5e3#
在整数索引列表的情况下,我只需要
对于字典,你当然可以做
ql3eal8s4#
另一种(但速度较慢)方法:
当考虑到负索引时,它会变得更加冗长:
9ceoxa925#
或
ilmyapht6#
或者你可以这样做:
尽管它的效率可能比
range(len(mylist))
还要低。也许有人应该为列表提出一个keys()方法,它返回PEP中键的范围。c9x0cxw07#
以下方法返回
index == 0
和负索引值的True
结果(如果这样的索引对列表有效,例如[0, 1, 2]
的listIn[-2]
):wnvonmuf8#
首先,考虑边界条件。
1.长度为
l
的列表的最大有效索引是l-1
;从0开始,定义l
个元素。l
列表的最小有效索引是-l
;从-1开始,这又定义了l
元素。在原问题的上下文中,由此产生的表达:
请注意,空数组(长度为0)中 * 没有 * 个有效索引,并且此属性在此处保留-没有
i
满足0 <= i < 0
。