2015-07-12 20 views
0

儘管如此,這是應該拿出5所有實例功能的代碼,但我得到一個錯誤:如何從列表中多次出現5個?

i = [ 6 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 5 ] 

def removeFive (i) : 
    x = 0 
    amount = len (i) 
    for x in range (amount - 1) : 
     if i [ x ] == 5 : 
      i . remove ([ x ]) 
     else: 
      pass 
     x = x + 1 
    print (i) 
    return None 

removeFive (i) 

錯誤消息:

i . remove ([ x ]) 
ValueError: list.remove(x): x not in list 

任何幫助嗎?

+0

我根本不知道python,但也許你應該刪除i [x]? –

+0

你說得對,謝謝兄弟,derp。 – Max

回答

1

list.remove()函數實際上接受的元素去掉,在這種情況下5,而不是指數(尤其是不索引作爲列表)。這就是你遇到錯誤的原因。這種行爲的例子 -

>>> l = [5,4,3,2,1] 
>>> l.remove(1) 
>>> l 
[5, 4, 3, 2] #note that element 3 got removed not the index 3. 

而且,你不應該從一個列表,而迭代它刪除元素,因爲你第一次更改列表,對於元素的索引也發生變化(由於去除)和因此你錯過了檢查一些元素。

爲你做這將返回沒有要刪除的元素的新名單,並分配回我最簡單的方法,實例 -

def removeFive (i) : 
    return [x for x in i if x != 5] 
i = removeFive(i) 
i 
>>> [6, 2, 3, 4, 6, 7, 8, 9, 10] 

,你甚至不需要一個功能 -

i = [x for x in i if x != 5] 
i 
>>> [6, 2, 3, 4, 6, 7, 8, 9, 10] 
2

你說你想取5了所有情況下,這是做這件事:

>>> i = [ 6 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 5 ] 
>>> x = [e for e in i if e != 5] 
>>> x 
[6, 2, 3, 4, 6, 7, 8, 9, 10] 
>>> 
0

list.remove方法,所以首先接受的價值不是它的指數,你需要通過值刪除,你也通過了列表中的索引,似乎你想通過i[x]

但作爲一個更Python的方式,你可以使用列表理解,除去5的:

>>> i = [ 6 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 5 ] 
>>> [t for t in i if t!=5] 
[6, 2, 3, 4, 6, 7, 8, 9, 10] 
1

另一種方法是使用內置的方法filter,這種方式:

>>> i = [ 6 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 5 ] 
>>> filter(lambda x: x!=5, i) 
[6, 2, 3, 4, 6, 7, 8, 9, 10] 
+0

@MalikBrahimi你有沒有把它與列表理解相對照? – juanchopanza

相關問題