说我有这样的清单:
[['14632','apples'],
['134','oranges'],
['834','bananas'],
['472','tomatoes']]
当用户输入“橘子”时,我尝试删除某个项目(例如,[' 134'橙子'])作为函数中的参数。到目前为止,这是我的代码:
def remove_item(my_list, name):
name = raw_input()
for item in my_list:
if name == item[1]:
my_list.remove(item)
其中item [0]是数字,item [1]是字符串。这段代码不起作用,我遗漏了删除操作,或者我使用了' =='错?
答案 0 :(得分:2)
通过插入或删除元素来修改循环的列表通常存在风险。在Python中,删除当前元素会使for循环跳过下一个项目。 Python手册建议在这种情况下迭代列表的副本。
从Python 3.1.3文档 - compount语句 - 8.3 for
语句:
注意当序列被修改时有一个微妙的 循环(这只能发生在可变序列,即列表中)。一个 内部计数器用于跟踪下一个使用的项目,以及 这在每次迭代时递增。当这个计数器到达时 循环终止的序列长度。这意味着,如果 suite从序列中删除当前(或前一个)项目 将跳过下一个项目(因为它获取当前项目的索引 已经治疗了)。同样,如果套件插入一个 当前项目之前的序列中的项目,当前项目将是 下次循环再次治疗。这可能导致讨厌 使用切片制作临时副本可以避免的错误 整个序列,例如,
for x in a[:]: if x < 0: a.remove(x)
答案 1 :(得分:0)
你可以这样做:
def remove_item(my_list, name):
return [item for item in my_list if item[1] == name]