2017-05-25 29 views
0
def every_other (l): 
    alist = [] 
    alist = l 
    for i in range (len (l)-1): 
     print (i) 
     if i % 2 == 1: 
      del (alist [i]) 
    print (alist) 

every_other ([0, -12, 4, 18, 9, 10, 11, -23]) 

輸出是[0,4,18,10,11] 當它應該是:[0,4,9,11] 在此先感謝。我試圖從列表中刪除所有其他元件,它不工作

+2

如果從列表中刪除某些內容,則所有較高位的內容都會向下移動。如果你想這樣做,你可以從頭開始向下循環「i」,而不是從頭開始向上循環。 – khelwood

+0

'del l [1 :: 2]'應該在沒有任何循環的情況下工作。 – zondo

回答

5

您不能從列表中刪除項目並同時遍歷它,因爲這會混淆迭代器。創建一個新的列表,並添加到它,而不是從舊刪除項目,或者您可以使用Python切片語法爲此在一個操作:

def every_other(l): 
    print l[::2] 
0

此外,您還可以使用列表中理解和過濾列表基於其數:

the_list = [0, -12, 4, 18, 9, 10, 11, -23] 

new_list = [i for a, i in enumerate(the_list) if a%2 == 0] 
0
Below code will solve your logic: 

a=[0, -12, 4, 18, 9, 10, 11, -23] 
l=[] 
for i,x in enumerate(a): 
    print "index : ",i,"data : ",x,">>>",i%2 
    if i%2!=1: 
     l.append(x) 

要刪除,當你是在索引1刪除-12新的列表是[0,4,18,你正試圖iterate.so相同的列表, 9,10,11,-23] 現在你達到了迭代的索引2,你的值是18,所以它沒有被刪除,並且山姆e邏輯一直持續到迭代完成。

相關問題