4

假设是这样的:

if mylist[0] == 1 or mylist[12] == 2:
   # do something

但我不确定是否mylist[12]永远不会超出范围。怎么做才能让事情变得简单并仍然检查索引是否存在?不想做

if mylist[0] == 1:
    # do something
elif mylist[12] == 2:
    # do the EXACT same thing

当您获得太多相同的代码行时。

4

4 回答 4

10

您可以检查列表的长度:

if mylist[0] == 1 or (len(mylist) > 12 and mylist[12] == 2):

这使用了 的短路行为and来确保mylist[12]如果列表包含 12 个或更少的项目,则不会对其进行评估。

于 2012-05-19T20:04:53.850 回答
4

切片总是返回一个值(即使它是一个空列表)。你可以这样做:

if myList[0] == 1 or myList[12:13] == [2]:
于 2012-05-19T20:16:03.307 回答
1

或者,如果您认为它更具可读性,如下所示:

if mylist[0] == 1:
    # do something
elif len(mylist) > 12 and mylist[12] == 2:
    # do same thing
于 2012-05-19T20:07:58.817 回答
0
def get(arr, ind, default=None):
    try:
        return arr[ind]
    except IndexError:
        return default

if get(myList, 0)==1 or get(myList, 12)==2:
    # do something
于 2012-05-19T21:44:23.593 回答