弹出空列表错误

时间:2014-03-03 06:40:29

标签: python list loops nested pop

我正在编写一个代码,从包含3个嵌套列表的列表中弹出。 我想从第一个内循环结束开始弹出最后一个元素。它工作正常,直到它到达第一个元素并返回(IndexError:从空列表弹出)。如何使用范围功能处理这种情况?

toappendlst= [[[62309, 1, 2], [62309, 4, 2], [6222319, 4, 2], [6235850, 4, 2], [82396378, 4, 3], [94453486, 4, 3], [0, 0, 0]],[[16877135, 6, 2], [37247278, 7, 2],    [47671207, 7, 2], [0, 0, 0]]]

for chro in range(-1,len(toappendlst)):
            popdPstn = toappendlst[chro].pop()
            print(popdPstn)

0 \ P

[0, 0, 0]
[47671207, 7, 2]
[37247278, 7, 2]
Traceback (most recent call last):
 File "C:\Python33\trial.py", line 41, in <module>
 popdPstn = toappendlst[chro].pop()
IndexError: pop from empty list

2 个答案:

答案 0 :(得分:0)

您正在range(-1, len(lst))进行迭代,这是一系列len(lst)+1个数字(-1到len(lst)-1,包括在内)。这不仅仅是列表中元素的数量,因此您的最终.pop将在空列表中运行。

您可能不需要从列表中实际弹出。例如,for item in reversed(lst):将以相反的顺序迭代列表(与从列表中弹出的顺序相同),而不会破坏列表内容。

或者,如果您确实需要弹出列表中的每个项目,则只需迭代for i in xrange(len(lst))以迭代len(lst)次。如果您需要相反的索引,for i in reversed(xrange(len(lst)))

答案 1 :(得分:0)

用....更改你的清单

toappendlst= [[[62309, 1, 2]], [[62309, 4, 2]], [[6222319, 4, 2]], [[6235850, 4, 2]], [[82396378, 4, 3]], [[94453486, 4, 3]], [[0, 0, 0]],[[16877135, 6, 2]], [[37247278, 7, 2]],    [[47671207, 7, 2]], [[0, 0, 0]]]

或者您可以使用列表序列,如...

toappendlst= [[62309, 1, 2], [62309, 4, 2], [6222319, 4, 2], [6235850, 4, 2], [82396378, 4, 3], [94453486, 4, 3], [0, 0, 0],[16877135, 6, 2], [37247278, 7, 2],    [47671207, 7, 2], [0, 0, 0]]
for chro in toappendlst[::-1]:
        print(chro)