将列表中的元素与列表列表中的每个元素进行比较

时间:2017-07-19 19:55:58

标签: python python-2.7 itertools

我试图将一个列表中的元素与列表列表中的每个元素进行比较。

hsdr_machine_one=['P#1', 'P#2', ...]
hsdr_machine_two=[...]
hsdr_machine_three=[...]

hsff_machine_four=['P#4', 'P#5', ...]
hsff_machine_five=['P#6', ...]
hsff_machine_six=[...]

hsdr_machines_list=[hsdr_machine_one, hsdr_machine_two, hsdr_machine_three]
hsff_machines_list=[hsff_machine_four, hsff_machine_five, hsff_machine_six]

part_number_combinations = []
for part_number in itertools.product(*hsdr_machines_list):
    part_number_combinations = [part_number[0]] + [part_number[1]]
    print part_number_combinations

我知道这段代码不会让我在那里,它只是我在itertools中搞砸的东西。我之前使用product(hsdr_machine_one, hsff_machine_four)成功地比较了两台机器。但现在我想尝试一次性完成。

输出将是:

P#1, P#4
P#1, P#5
P#1, P#6
P#2, P#4
P#2, P#5 ...

然后它将继续比较hsdr_machine_twohsff_machine_fourfivesix

2 个答案:

答案 0 :(得分:1)

展平嵌套列表,然后查看元素的笛卡尔积。

hsdr_flat = sum(hsdr_machines_list, [])
hsff_flat = sum(hsff_machines_list, [])

for hsdr, hsff in itertools.product(hsdr_flat, hsff_flat):
    print hsdr, hsff

答案 1 :(得分:1)

您可以使用itertools.products创建子列表组合,然后一次使用两个子列表中的项目来获取对的产品:

for hsdr, hsff in itertools.product(hsdr_machines_list, hsff_machines_list):
    for pt1, pt2 in itertools.product(hsdr, hsff):
         print pt1, pt2