2017-03-27 18 views
2

私はボードリストのリストを持っています。boardsboardsには、それぞれに同じ種類のボードを持つ多数のサブリストが含まれています。本質的に:[[...], [...], ...]各サブリストの項目を他のすべてのサブリスト(python)のすべての項目に一致させる

最初のサブリストが1で、2番目のサブリストが2であったとします.1の各要素を2の各要素と比較する必要があります。したがって、(1[0], 2[0]), (1[0], 2[1])...(1[0], 2[len(2)-1]);(1[0], 2[0])...のペアが必要です。

の問題は、私はちょうどn個forループを行う私がないことができることを意味し、boardsにあるどのように多くのサブリスト分からないです。これは私が今持っているものです:

for sublist in boards: 
    for board in sublist: 
     for board_indices in itertools.permutations(range(len(sublist)), len(boards)): 
      matched_boards = [boards[a][j] for a, j in enumerate(i)] 

しかし、私はそれを考えすぎていると思います。私はこれを行うための簡単でシンプルで読みやすい方法があると確信していますが、私はそれが何であるか分かりません。それはあなたが望むだけのペアをなら

+0

あなたの質問は少し不明です。 'boards'のサブリストのすべてのペアからアイテムのすべてのペアを生成したいですか? –

+0

また、投稿したコードはちょっと奇妙です。あなたの 'for board_indices'ループは' board_indices'で生成された順列に何もせず、あなたは定義されていない変数 'i'を持っています。 –

+0

@ PM2Ringはい、そうです。また、 'i'変数を残して申し訳ありません。コードを読みやすくして、' i'を 'board_indices'に置き換えるのを忘れました。 – rassar

答えて

2

は、すべての可能なクロスサブリストのペアを与えることitertools.productitertools.combinationsを組み合わせることができます

for sublist_pair in itertools.combinations(nested_iter, 2): 
    for item_pair in itertools.product(*sublist_pair): 
     print(item_pair) 

を与える:

(1, 'a') 
(1, 'b') 
(1, 'c') 
(2, 'a') 
(2, 'b') 
(2, 'c') 
(3, 'a') 
(3, 'b') 
(3, 'c') 
(1, 0.1) 
(1, 0.2) 
(1, 0.3) 
(2, 0.1) 
(2, 0.2) 
(2, 0.3) 
(3, 0.1) 
(3, 0.2) 
(3, 0.3) 
('a', 0.1) 
('a', 0.2) 
('a', 0.3) 
('b', 0.1) 
('b', 0.2) 
('b', 0.3) 
('c', 0.1) 
('c', 0.2) 
('c', 0.3) 
+0

あなたの2番目の解決策はOPが望むものだと私は思っていますが、私たちはただ待って見なければなりません。 :) –

+0

はい、あなたの2番目の仕事。ありがとうございました! :) – rassar

+0

間違った代替回答を削除しました – ayoon

関連する問題