获取前6个元素,条件是元素> = 3

时间:2015-04-20 20:33:04

标签: python heap top-n

我试图列出11个元素

我想只从l[0]l[5]弹出最大元素。在以下两个条件之一:

l[5] >= 3l[5]已不存在或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]将不复存在,但我该如何创建此代码。

3 个答案:

答案 0 :(得分: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):

答案 1 :(得分: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)

答案 2 :(得分: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
>>>