Python的算法列表和子列表
我有许多可以“打开”列表或“关闭”,这样的事情:Python的算法列表和子列表
lista = ["a", "b", "c"] listb = ["d", "e"]
listc = ["a", "b", "e"]
listd = ["c", "d"]
我有所有打开的项目的主列表:
all_open = ["a", "b", "c", "e"]
和开放列表的列表:
open_lists = ["lista", "listc"]
由于子列表的双头呆,他们的项目将被添加到主列表:
open_lists.append("listb") for each i in listb:
if !(i in all_open):
all_open.append(i)
是否有一个简单的算法,当一个子列表关闭时,从主列表中删除项目?目标是不要删除属于其他尚未打开的列表的项目。
回答:
你必须记录每件物品来自多少个清单。最简单的方法是使用地图。我喜欢用collections.Counter
这样的东西。
import collections count = collections.Counter()
# add a list
for i in listb:
if count[i] == 0:
all_open.append(i)
count[i] += 1
# delete a list
for i in listb:
count[i] -= 1
if count[i] == 0:
all_open.remove(i)
此外,你可以摆脱all_open
干脆使用count.keys()
迭代器,而非。
回答:
喜欢的东西
all_items = [] for l in open_lists:
for item in l:
if item not in all_items:
all_items.append(item)
all_open = [item for item in all_open if item not in all_items]
我相信这会在你的愿望,虽然我不是太清楚,如果这是你所要求的结果。您还可以跟踪每件物品打开的次数,以及关闭列表时,将其减少1.如果该值为0,则删除一件物品。可能比这更有效率。
以上是 Python的算法列表和子列表 的全部内容, 来源链接: utcz.com/qa/263843.html