2017-05-19 50 views
-2

這是我的代碼如下,我試圖從第一個列表中刪除所有非零對象,並在第二個列表中有相應的索引。它目前正在循環的第一次迭代中刪除第0個實體,但就是這樣。基本上,我問爲什麼當r達到2它不會刪除值「2」基於計數和索引刪除項目

r = 1 
OG = [1, 2, 3] 

Pred = [0, 2, 6] 

while r < 10: 
    print "r: %s" %r 
    print OG 
    print Pred 

    while OG.count(r) > 0: 
     bump = OG.index(r) 
     del OG[bump] 
     del Pred[bump] 
     print "success" 

    r = r+.1 
print OG 

enter image description here

+3

請複製/粘貼輸出,而不是通過第三方網站發送屏幕截圖。 –

+1

你關心在第二個列表中維護秩序嗎?在這個例子中你最終想要什麼?它應該是'OG = []'還是'Pred = [6]'? – tdelaney

+0

我這樣做。這個例子與這個例子中的電影評級相關 –

回答

4

我想刪除所有非零對象得到的第一個列表和第二個列表中有相應的索引。

創建兩個新列表並重新分配列表的名稱要比做適當的操作要容易得多。

我將zip列表放在一起併成對循環其項目,只保留第一個元素爲零的對。然後再將結果轉置爲zip並重新分配名稱。

我認爲你的列表保證具有相同的長度。

>>> list_1 = [1, 0, 2, 0, 0, 3] 
>>> list_2 = [1, 2, 3, 4, 5, 6] 
>>> 
>>> list_1, list_2 = map(list, zip(*((x, y) for x, y in zip(list_1, list_2) if not x))) 
>>> list_1 
[0, 0, 0] 
>>> list_2 
[2, 4, 5]