2016-10-20 5 views
2

Nのリストを結合して、それらのすべての値の1つに保持したいと考えています。どれくらいのリストがあるかわからないので、コードは動的でなければなりません。未知数のリストを結合し、共通の値のみを保持する

a_list = [(3, -1), (3, -1), (3, 0), (4, -1), (3, 1), (5, -1), (3, 2), (6, -1), (3, 3), (7, -1), (7, -1), (3, 3), (7, 0), (4, 3), (7, 1), (5, 3), (7, 2), (6, 3), (7, 3), (7, 3)] 
b_list = [(-3, 3), (-3, 3), (-3, 4), (-2, 3), (-3, 5), (-1, 3), (-3, 6), (0, 3), (-3, 7), (1, 3), (-3, 8), (2, 3), (-3, 9), (3, 3), (3, 3), (-3, 9), (3, 4), (-2, 9), (3, 5), (-1, 9), (3, 6), (0, 9), (3, 7), (1, 9), (3, 8), (2, 9), (3, 9), (3, 9)] 
a = set(a_list) 
b = set(b_list) 
print(list(a&b)) 

は、このコードはリストの既知の数のために完璧に動作しますが、私はそこにあるどのように多くのリストを知りません。

注:「不明な数のリスト」とは、スクリプトが実行された値に依存することを意味します。

編集:N> 0

+0

がゼロのリストがあることはできますか?なぜなら、以下の解決法はそれに失敗するからです。さらに、その結​​果がどうなるべきかは不明です。 –

+0

@StefanPochmannいいえ、N> 1 –

答えて

4

あなたが使用することができます内蔵のintersectionset機能:

print (set.intersection(*map(set, lists))) 
+0

追加のライブラリは必要ないので、私はこの回答に同意します。 –

+0

@ SamuelShifterovichもう一つの答えは、追加のライブラリを必要としません。 'functools'はPythonの標準ライブラリの一部です。 –

+0

@StefanPochmann私は 'import'されるものとしてライブラリを意味しました –

2

使用reduce

import functools 
list_of_sets = [set(x) for x in list_of_lists] 
intersection = functools.reduce(lambda x, y: x & y, list_of_sets) 
関連する問題