我正在编写一个代码,从包含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
答案 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)