2012-06-27 50 views
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'(修復它本身)之後)。它是否始終檢查原始列表?

+3

您可以發佈您確切的代碼,至少部分地方'equ2'和在那裏你打印輸出'flag4'設置呢?用'equ2 =「10 + 2 - 2 + 4」運行代碼; flag4 = list()'並且打印'flag4'不會產生你所說的輸出。 – jedwards

+2

編輯後,輸出*我*得到:'['-10','-2',' - ','-2','-4']' – jedwards

回答

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

​​

其中還輸出

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

哇,這比我迄今爲止做的更簡單(也更有效)...謝謝:d – asqapro

+0

'POP(0)'導致該列表的其餘項目要複製/移動的,所以這是不是很有效 –

+0

@gnibbler,同意 - 我扔了一個列表理解的版本,應該是更高效它不會移動(甚至修改)'equ2'。 – jedwards

2

將第一個元素從列表中刪除後,您嘗試修改的索引不同步。

有循環成對更好的方法,但它並不清楚我是什麼循環應該在一般情況下

如做。

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

有什麼方法可以解決它嗎?也許創建列表的副本,循環複製並從原始刪除? – asqapro

+0

@asqapro:你能更清楚地解釋目的是什麼嗎?如果您只想從equ2列表中刪除+/-,並且摺疊列表中的每一對,那麼執行該操作的方法要簡單得多。 –

+0

我想循環反轉每個運算符(+成爲 - 等),並追加反轉的運算符和它所用的整數flag4 – asqapro