同时从所有列表中删除项目

时间:2017-06-17 19:37:50

标签: python

假设我有3个列表,

list_of_fruits = ["apple", "banana", "orange"]

list_of_orange_things = ["carrot", "orange", "basketball"]

list_of_colors = ["orange", "green", "blue"]

有没有办法删除" orange"同时从所有列表中,没有专门针对任何单个列表?

在运行程序的某个时刻,对我来说移除" orange"从所有列表。有一种方法可以删除" orange"立即从所有列表中,而不是从每个列表中单独删除它。

从每个列表中单独删除可以在我更改程序中的列表数时出错。这需要我在程序中找到每个地方" orange"需要从所有列表中删除,并仔细检查它将从中删除的列表是否与程序中的所有列表相对应。它也会造成不必要的混乱。另一种方法是优选的,以减少混乱并使错误无法实现。

我的实际程序在程序上生成内容,因此将始终创建和删除新对象。重要的是,程序能够在没有人工干预的情况下尽可能地处理变更。

3 个答案:

答案 0 :(得分:2)

你可以试试这个:

s = "orange"

list_of_fruits = ["apple", "banana", "orange"]

list_of_orange_things = ["carrot", "orange", "basketball"]

list_of_colors = ["orange", "green", "blue"]

new_list = [list_of_fruits, list_of_orange_things,list_of_colors]

final_list = [[b for b in i if b != s] for i in new_list]

输出:

[['apple', 'banana'], ['carrot', 'basketball'], ['green', 'blue']]

这个基本算法迭代new_list中包含的列表,并过滤掉字符串s的任何出现。但正如@Willem Van Onsem指出的那样,你会想要找到一种存储列表的新方法,这样你就可以遍历每个人一次,例如列表中的列表。

答案 1 :(得分:0)

只需保留所有列表的列表,在创建列表时向该列表添加新列表,以及何时需要从所有列表中删除某些列表,迭代列表列表。

答案 2 :(得分:0)

好的,我借用了@ Ajax1234提供的代码并修改它以适用于我的应用程序。

他的解决方案几乎是完美的,除了它保持个人名单不变。我添加了代码来遍历包含列表中的每个列表并删除" orange"来自每个人。

@John Dengis从一开始就说得对,但我想提供代码。

这是代码。

list_of_fruits = ["apple", "banana", "orange"]

list_of_orange_things = ["carrot", "orange", "basketball"]

list_of_colors = ["orange", "green", "blue"]

new_list = [list_of_fruits, list_of_orange_things, list_of_colors]


for lists in new_list:
    for item in lists:
        if item == "orange":
            lists.remove(item)

没有错误,当我向程序添加或删除列表时,它会动态调整。

就像@John Dengis指出的那样,这是一个迭代列表中列表的问题。有一个问题在这里产生了非常相似的回答:Python - Iterating through list of list