0

搞砸的代码片段:

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”(在那之后自行修复)。它是否一直在检查原始列表?

4

2 回答 2

2

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

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

例如。

>>> flag4 = [dict(['+-','-+'])[i] + j for i,j in zip(*[iter(equ2)]*2)]
>>> print flag4
['-10', '-2', '+2', '-4']
于 2012-06-27T01:04:21.283 回答
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']
于 2012-06-27T01:12:40.397 回答