代码片段搞砸了:
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'(之后修复自己的排序)。它是否一直在检查原始列表?
答案 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']