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

Python 循环复制列表和从原始列表中删除从复制列表中删除,python,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.

混乱的代码片段:

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'(在这之后修复自身排序)。是否一直在检查原始列表?

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

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

例如


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

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

例如


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

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'] 它也输出

['-10', '-2', '+2', '-4'] ['-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'] 它也输出

['-10', '-2', '+2', '-4'] ['-10', '-2', '+2', '-4']
您能否发布准确的代码,至少是设置了
eq2
flag4
的部分,以及打印输出的位置?使用
eq2=“10+2-2+4”运行代码;flag4=list()
和打印
flag4
不会生成您所说的输出。编辑后,我得到的输出:
['-10'、'-2'、'-'、'-2'、'-4']
您能否发布准确的代码,至少是设置
eq2
flag4
的部分以及打印输出的位置?使用
eq2=“10+2-2+4”运行代码;flag4=list()
和打印
flag4
不会生成您所说的输出。编辑后,我得到的输出:
['-10'、'-2'、'-2'、'-4']
有什么办法修复它吗?也许创建列表的副本,循环复制并从原始列表中删除?@asqapro:你能更清楚地解释一下目的是什么吗?如果您只想从equ2列表中删除+/-并折叠列表的每一对,那么有更简单的方法来执行。我希望循环反转每个运算符(+变成-),等等,在Flag4中附加反向运算符和整数,您是否关心原始元素是否从Eq2中删除,或者这只是一个副作用?副作用,是否删除无关紧要有什么办法修复它吗?也许创建列表的副本,循环复制并从原始列表中删除?@asqapro:你能更清楚地解释一下目的是什么吗?如果您只想从equ2列表中删除+/-并折叠列表的每一对,那么有更简单的方法来执行。我希望循环反转每个运算符(+变成-),等等,在Flag4中附加反向运算符和整数,你是否关心原始元素是否从Eq2中移除,或者这只是一个副作用?副作用,移除它们并不重要哇,这比我目前所做的要简单得多(也更有效)。。。谢谢:D
pop(0)
会复制/移动列表中的其余项目,因此这不是很好efficient@gnibbler,同意——我抛出了一个列表理解版本,它应该更有效,因为它不会移动(甚至修改)
eq2
@jedwards,在我的回答中与LC有一点相似:)@gnibbler,哇,真有趣。你的字典很酷,你把行数减少了50%!哇,这比我目前所做的要简单得多(也更有效)。。。谢谢:D
pop(0)
会复制/移动列表中的其余项目,因此这不是很好efficient@gnibbler,同意——我抛出了一个列表理解版本,它应该更有效,因为它不会移动(甚至修改)
eq2
@jedwards,在我的回答中与LC有一点相似:)@gnibbler,哇,真有趣。你的字典很酷,你把行数减少了50%!