[英]Looping copied list and deleting from original list deletes from copied list
混乱的代码片段:
equ2 = ['+', '10', '+', '2', '-', '2', '+', '4']
flag4 = [ ]
for k in equ2[:]:
if equ2[equ2.index(k)-1] == '+':
del(equ2[equ2.index(k)])
flag4.append('-' + k)
elif equ2[equ2.index(k)-1] == '-':
del(equ2[equ2.index(k)])
flag4.append('+' + k)
print flag4
*编辑:我搞砸了变量,对此表示遗憾:
* Edit2:再次抱歉,D:jedwards,这是我得到的输出,我从复制列表中删除了其他输出
我得到的输出:
['-10', '-2', '--', '-2', '-4']
我想要的输出:
['-10', '-2', '+'2, '-4']
我发现,到达“-”时,它会检查原始列表(现在已修改为+-2 + 4),并且看到“-”之前的项目是“ +”,因此会附加“-” -”,然后再次检查原始列表(现在为+ 2 + 4),并在2之前看到“ +”,因此它附加了“ -2”(此后固定其本身的排序方式)。 是否一直在检查原始清单?
从列表中删除第一个元素后,您要修改的索引不同步。
有更好的成对循环的方法,但是我不清楚在一般情况下循环应该做什么
例如。
>>> flag4 = [dict(['+-','-+'])[i] + j for i,j in zip(*[iter(equ2)]*2)]
>>> print flag4
['-10', '-2', '+2', '-4']
我并不真的认为这是做到这一点的最佳方法,以下工作
equ2 = ['+', '10', '+', '2', '-', '2', '+', '4']
flag4 = list()
chgsgn = dict([('+','-'), ('-','+')])
while len(equ2):
sgn = equ2.pop(0)
num = equ2.pop(0)
flag4.append(chgsgn[sgn] + num)
print flag4
哪个输出
['-10', '-2', '+2', '-4']
编辑:或者,使用列表equ2
而不修改equ2
:
chgsgn = dict([('+','-'), ('-','+')])
flag4 = [chgsgn[sgn]+num for (sgn,num) in zip(*[iter(equ2)]*2)]
print flag4
其中也输出
['-10', '-2', '+2', '-4']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.