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

回到顶部