0

「開く」または「閉じる」ことができるリストがいくつかあります。次のようなものです。

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)

サブリストが閉じられたときにマスターリストからアイテムを削除する簡単なアルゴリズムはありますか?目標は、まだ開いている他のリストに属するアイテムを削除しないことです。

4

2 に答える 2

2

各アイテムのリストの数を追跡する必要があります。これを行う最も簡単な方法は、マップを使用することです。私はこのようなものに使う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()代わりにイテレータを使用できます。

于 2012-06-23T00:24:37.573 に答える
0

何かのようなもの

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の場合は、アイテムを削除します。これよりもはるかに効率的かもしれません。

于 2012-06-23T00:25:48.567 に答える