将每个子列表项与每个其他子列表中的每个项匹配(python)

时间:2017-03-27 01:11:04

标签: python python-3.x loops multidimensional-array itertools

我有一份董事会名单清单boardsboards包含许多子列表,每个子列表中都有相同类型的板。基本上:[[...], [...], ...]

假设第一个子列表为1,第二个子列表为2.我需要将每个元素1与2的每个元素进行比较。因此,我需要成对(1[0], 2[0]), (1[0], 2[1])...(1[0], 2[len(2)-1]);(1[0], 2[0])...

问题是,我不知道boards中有多少个子列表,这意味着我不能只执行n for次循环。这就是我现在所拥有的:

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)]

但我认为我正在过度思考它。我确信有一种更简单,更简单,更易读的方法,但我不确定它是什么。

1 个答案:

答案 0 :(得分:2)

如果它只是你想要的对,你可以将itertools.combinationsitertools.product结合起来,给出每个可能的跨子列表对:

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)