假设我有3个列表,
list_of_fruits = ["apple", "banana", "orange"]
list_of_orange_things = ["carrot", "orange", "basketball"]
list_of_colors = ["orange", "green", "blue"]
有没有办法删除" orange"同时从所有列表中,没有专门针对任何单个列表?
在运行程序的某个时刻,对我来说移除" orange"从所有列表。有一种方法可以删除" orange"立即从所有列表中,而不是从每个列表中单独删除它。
从每个列表中单独删除可以在我更改程序中的列表数时出错。这需要我在程序中找到每个地方" orange"需要从所有列表中删除,并仔细检查它将从中删除的列表是否与程序中的所有列表相对应。它也会造成不必要的混乱。另一种方法是优选的,以减少混乱并使错误无法实现。
我的实际程序在程序上生成内容,因此将始终创建和删除新对象。重要的是,程序能够在没有人工干预的情况下尽可能地处理变更。
答案 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