0

我正在尝试列出 11 个元素

我只想从 to 弹出最大l[0]元素l[5]。在以下两种情况之一:

l[5] >= 3orl[5]不再存在 or None

l = [2,8,6,2,8,7,9,8,6,7,4]
max = 0
maxIndex = 0
while (l[5] >= 3 or l[5] is None):
    for x in range(6):
        if l[x] > max:
            max = l[x]
            maxIndex = x
    l.pop(maxIndex)
print(l)

我收到错误消息:

IndexError: list index out of range

我知道在某些时候l[5]将不再存在,但我怎样才能创建这个代码。

4

3 回答 3

2

最小的可重现代码:

l = [1, 2, 3]
l[3] is None # raises IndexError
assert len(l) == 3 # len(l) returns 3

如您所见,访问不存在的项目会引发 IndexError,因此正确的条件应包含长度测试。

while (len(l) >= 6 and l[5] >= 3):
于 2015-04-20T20:36:53.447 回答
0

反转条件:

l = [2,8,6,2,8,7,9,8,6,7,4]
max = 0
maxIndex = 0
while len(l) > 5 or l[5] >= 3:
    for x in range(6):
        if l[x] > max:
            max = l[x]
            maxIndex = x
    l.pop(maxIndex)
print(l)
于 2015-04-20T20:35:04.383 回答
0

我认为这可以满足您的所有需求 - 如果有第 5 个元素并且它是>=3None

>>> l =  [2,8,6,2,8,7,9,8,6,7,4]

>>> max(l[0:5]) if len(l)>5 and (l[5]>=3 or l[5] is None) else None
8

>>> l = [1,2,3]
>>> max(l[0:5]) if len(l)>5 and (l[5]>=3 or l[5] is None) else None
>>>
于 2015-04-20T20:56:06.813 回答