为了账号安全,请及时绑定邮箱和手机立即绑定

Python迭代工具

Python迭代工具

四季花海 2021-11-16 15:13:05
我有 4 个元素数量不同的列表。我想输出单个列表元素的 3 个项目的所有可能组合。一种方法是 itertool.combinations(),但使用 .combinations 我只能组合列表中的项目。列表:colors      = ["blue", "yellow", "green", "black", "magenta"]numbers     = [1,2,3,4,5,6,7,8]material = ["beton", "wood", "stone"]names      = ["Susi", "Klara", "Claire", "Moni"]结果应该是:[blue, 1, beton], [blue, 1, Susi], [blue, 2, beton]…
查看完整描述

3 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

您可以使用该功能product():


from itertools import product


list(product(colors, numbers, material + names))


查看完整回答
反对 回复 2021-11-16
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

使用product, 以及chain名称和材料:


from itertools import chain, product


colors      = ["blue", "yellow", "green", "black", "magenta"]

numbers     = [1,2,3,4,5,6,7,8]

material = ["beton", "wood", "stone"]

names      = ["Susi", "Klara", "Claire", "Moni"]


out = product(colors, numbers, chain(material, names))

部分输出:


for i in range(10):

    print(next(out))


('blue', 1, 'beton')

('blue', 1, 'wood')

('blue', 1, 'stone')

('blue', 1, 'Susi')

('blue', 1, 'Klara')

('blue', 1, 'Claire')

('blue', 1, 'Moni')

('blue', 2, 'beton')

('blue', 2, 'wood')

('blue', 2, 'stone')


查看完整回答
反对 回复 2021-11-16
?
绝地无双

TA贡献1946条经验 获得超4个赞

这会起作用,产生 436 种组合:


import itertools as itls


colors      = ["blue", "yellow", "green", "black", "magenta"]

numbers     = [1,2,3,4,5,6,7,8]

material    = ["beton", "wood", "stone"]

names       = ["Susi", "Klara", "Claire", "Moni"]


my_lists    = [colors, numbers, material, names]


my_combos = [(x,y,z) for (lst_1,lst_2,lst_3) in itls.combinations(my_lists,3) 

                             for (x,y,z) in itls.product(lst_1, lst_2, lst_3) ]


# print (my_combos)

print (len(my_combos))

解释:

所需的结果被构造为一个列表,并分配给my_combos

该列表是使用具有嵌套双迭代的列表推导式构建的。

在嵌套双迭代中:

  1. 外部 for 循环for (lst_1,lst_2,lst_3) in itls.combinations(my_lists,3)遍历列表的所有可能组合,一次获取 3 个列表。

  2. 内部 for 循环for (x,y,z) in itls.product(lst_1, lst_2, lst_3)迭代lst_1lst_2, and的笛卡尔积lst_3(这些lst_1lst_2, 和lst_3get 为外部 for 循环的每次迭代定义)

验证结果中没有重复的代码:

# Code to verify that there are no duplicates.

from collections import Counter

for x, count_x in counts.items():

    if (count_x > 1): # if duplicate

        print ("Duplicate item ({}) occurs {} times".format(x, count_x))


查看完整回答
反对 回复 2021-11-16
  • 3 回答
  • 0 关注
  • 165 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信