我有一份董事会名单清单boards
。 boards
包含许多子列表,每个子列表中都有相同类型的板。基本上:[[...], [...], ...]
。
假设第一个子列表为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)]
但我认为我正在过度思考它。我确信有一种更简单,更简单,更易读的方法,但我不确定它是什么。
答案 0 :(得分:2)
如果它只是你想要的对,你可以将itertools.combinations
与itertools.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)