106

私はリストのリストを持っています:

lists = [[1,4,3,2,4], [4,5]]

このリストをフラットにして、すべての重複を削除したいと思います。または、言い換えると、集合和集合演算を適用します。

desired_result = [1, 2, 3, 4, 5]

これを行う最も簡単な方法は何ですか?

4

7 に答える 7

181

set.unionあなたが望むことをします:

>>> results_list = [[1,2,3], [1,2,4]]
>>> results_union = set().union(*results_list)
>>> print(results_union)
set([1, 2, 3, 4])

これは、3 つ以上のリストでも実行できます。

于 2010-01-28T00:54:10.940 に答える
18

Python 2.5 を使用しているように見えるので (バージョン != 2.6 の A が必要な場合は、Q で言及するとよいでしょう。ちなみに、現在の製品版です;-) として、セットではなくリストが必要です。結果、私はお勧めします:

import itertools

...

return list(set(itertools.chain(*result_list)))

itertoolsは通常、反復子 (および多くの種類のシーケンスやコレクション) を操作するための優れた方法であり、慣れ親しむことを心からお勧めします。 itertools.chain、特に、ここに文書化されています。

于 2010-01-28T03:38:01.517 に答える
1

共用体は、順序付けされたリストではサポートされていませんが、セットではサポートされています。set.unionをチェックしてください。

于 2010-01-28T00:53:35.777 に答える
0

以下を使用して交差点を作成しました。これにより、セットの必要がなくなりました。

a, b= [[1,2,3], [1,2]]
s = filter( lambda x: x in b, a)

また、

s = [ x for x in b if x in a ]
于 2010-01-28T00:58:16.210 に答える