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

时间:2012-06-27 00:49:39

标签: python

代码片段搞砸了:

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

*编辑:我弄乱了变量,抱歉:x

* Edit2:再次抱歉D:jedwards,这是我得到的输出,我从复制的列表中删除了另一个输出

我得到的输出:

['-10', '-2', '--', '-2', '-4']

我想要的输出:

['-10', '-2', '+'2, '-4']

我发现当它到达' - '时,它检查原始列表(现在修改为+ - 2 + 4),并且看到' - '之前的项是'+',所以它追加' - ',然后再检查原始列表(现在+ 2 + 4)并在2之前看到'+',所以它附加'-2'(之后修复自己的排序)。它是否一直在检查原始列表?

2 个答案:

答案 0 :(得分:2)

从列表中删除第一个元素后,您尝试修改的索引不同步。

有更好的方法可以成对循环,但是我不清楚循环在一般情况下应该做什么

例如

>>> flag4 = [dict(['+-','-+'])[i] + j for i,j in zip(*[iter(equ2)]*2)]
>>> print flag4
['-10', '-2', '+2', '-4']

答案 1 :(得分:2)

我真的不相信这是最好的方法,以下工作

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

chgsgn = dict([('+','-'), ('-','+')])
flag4 = [chgsgn[sgn]+num for (sgn,num) in zip(*[iter(equ2)]*2)]
print flag4

哪个也输出

['-10', '-2', '+2', '-4']