Python的方法は、すべての組合が複数のリストに含まれる値を作成します

StackOverflow https://stackoverflow.com/questions/2151517

  •  23-09-2019
  •  | 
  •  

質問

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

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

私はこのリストを平らにし、すべての重複を削除したいです。または、言い換えれば、集合和演算を適用します:

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

これを行う最も簡単な方法は何ですか? (私はこのプロジェクトのためのPython 2.4を使用するように強制しています)。

役に立ちましたか?

解決

set.union の欲しいものを行います:

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

また、以上の二つのリストでこれを行うことができます。

他のヒント

あなたはバージョンのAが必要な場合は、Qに言及することはいいことのPython 2.5(それの のだろうを使用しているように見えるので!= 2.6、現在の生産1、方法によって;-)その結果、リストではなく、セットをしたい、私はお勧めします:

   import itertools

   ...

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

itertools の一般的な作業に最適な方法ですイテレータと(およびその配列またはコレクションの多くの種類を持つ)と私は心からあなたがそれに慣れてお勧めします。 itertools.chainは、具体的には、ここの文書化されています。

労働組合が発注されているリストによってサポートされていませんが、セットによってサポートされています。 set.union にチェックしてください。

私はセットの必要性を回避する交差点を行うために、次を使用します。

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 ]

また、このスタイルに従うことができます。

In [12]: a = ['Orange and Banana', 'Orange Banana']
In [13]: b = ['Grapes', 'Orange Banana']
In [14]: c = ['Foobanana', 'Orange and Banana']

In [20]: list(set(a) | set(b) | set(c))
Out[20]: ['Orange and Banana', 'Foobanana', 'Orange Banana', 'Grapes']

In [21]: list(set(a) & set(b) | set(c))
Out[21]: ['Orange and Banana', 'Foobanana', 'Orange Banana']    
desired_result = [x for y in lists for x in y]
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top