2

私が求めていることを簡潔なタイトルで説明するのは少し難しいので、ここで説明します。クラスのリストがあり、これらのオブジェクトにはすべて独自のデータ セットが含まれています。私が抱えている問題は、これらのオブジェクトを繰り返し処理し、リスト内の現在のオブジェクトの前にあるオブジェクトの 1 つで使用されているデータを除外しようとすることです。コード フラグメントは次のようになります。

objs = [list-of-objects]
used = set([])
for obj in objs:
    used = used.union(obj.callSomeFunc(used))

その callSomeFunc メンバーは、現在使用されているセットと交差しないデータのセットを返します。

このコードは機能しますが、私はあまり好きではありません。これ以上の方法がないとは信じられません。

4

3 に答える 3

2

私が変更する唯一のことは、set.update()代わりに使用することですset.union()

objs = [list-of-objects]
used = set()
for obj in objs:
    used.update(obj.callSomeFunc(used))

を使用できますreduce()が、これは読みやすさを損なうと思います。

編集:これを使用したコードは次のreduce()とおりです。

used = reduce(lambda used, obj: used.union(obj.callSomeFunc(used)), objs, set())
于 2012-06-27T12:05:44.163 に答える
1

問題を再帰的に表現することもできます。これは、一部の人にとっては読みやすいかもしれません。:-)

def filter_list(used, remaining):
    if len(remaining) == 0:
        return used
    obj = remaining[0]
    return filter_list(used.append(obj.someFunc(used)), remaining[1:])
于 2012-06-27T12:30:18.157 に答える
1

私があなたの問題を理解していれば、あなたは次のようなものを探していると思います:

objs=[1,19,4,3,1,3,5,1,5,6,7,8,9,18,8,6]
used=[]

for x in objs:
  if x not in used: #only choose that data that is not present in used
    used.append(x)
print(used)     

出力:

[1, 19, 4, 3, 5, 6, 7, 8, 9, 18]
于 2012-06-27T12:10:49.663 に答える