1

オブジェクトのリストから、重複していない整数要素のリストを作成する必要があります。

例: 「id」と「other_id」の 2 つの属性を持つオブジェクトがあります。

first = [elem.id for elem in objects_list]
second = [elem.other_id for elem in objects_list]
print first
[0,1,2,3,4,5]
print second
[4,5,6,7,9]

これで、次のように、すべてのオブジェクトから 2 つの属性を含む 2 つのリストを作成できます。

first = [elem.id for elem in objects_list]
first.extend(elem.other_id for elem in objects_list if elem.other_id not in first)
print first
[0,1,2,3,4,5,6,7,9]

これをより短い方法で行う方法はありますか?

4

1 に答える 1

1

を使用しsetます。

sorted(set().union(first, second)) #returns a sorted list of unique items

デモ:

>>> first = [0,1,2,3,4,5]
>>> second = [4,5,6,7,9]
>>> sorted(set(first + second))
[0, 1, 2, 3, 4, 5, 6, 7, 9]

元の順序が重要な場合:

>>> first = [0,1,2,3,4,5]
>>> seen = set(first)
>>> first += [x for x in second if x not in seen and not seen.add(x)]
>>> first
[0, 1, 2, 3, 4, 5, 6, 7, 9]

大きなリストの場合、セットがルックアップを提供するため、セットアプローチが効率的になりO(1)ます。小さなリストの場合、アプローチも問題ありません。

于 2013-07-31T13:41:20.587 に答える