繁体   English   中英

循环复制列表并从原始列表中删除从复制列表中删除

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM