尽管如此,这是应该取出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 :(得分: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]
>>>
答案 1 :(得分: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.
此外,您不应该在迭代时从列表中删除元素,因为第一次更改列表时,元素的索引也会更改(由于删除),因此您错过了检查某些元素。
执行此操作的最简单方法是返回一个没有要删除的元素的新列表,并将其分配回i,示例 -
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 :(得分: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]
答案 3 :(得分:0)
list.remove
方法接受的值不是它的索引,所以首先需要传递一个值来删除,同样你已经在列表中传递了索引,似乎你要传递i[x]
但是作为一种更加pythonic的方式,你可以使用列表理解来删除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]