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中移除,或者这只是一个副作用?副作用,移除它们并不重要哇,这比我目前所做的要简单得多(也更有效)。。。谢谢:Dpop(0)
会复制/移动列表中的其余项目,因此这不是很好efficient@gnibbler,同意——我抛出了一个列表理解版本,它应该更有效,因为它不会移动(甚至修改)eq2
@jedwards,在我的回答中与LC有一点相似:)@gnibbler,哇,真有趣。你的字典很酷,你把行数减少了50%!哇,这比我目前所做的要简单得多(也更有效)。。。谢谢:Dpop(0)
会复制/移动列表中的其余项目,因此这不是很好efficient@gnibbler,同意——我抛出了一个列表理解版本,它应该更有效,因为它不会移动(甚至修改)eq2
@jedwards,在我的回答中与LC有一点相似:)@gnibbler,哇,真有趣。你的字典很酷,你把行数减少了50%!