使用原始输入删除python中列表的元素

时间:2014-04-07 04:00:57

标签: python list

说我有这样的清单:

[['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]是字符串。这段代码不起作用,我遗漏了删除操作,或者我使用了' =='错?

2 个答案:

答案 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]