gpt4 book ai didi

python - 有没有办法生成项目列表的所有唯一排列

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:33 25 4
gpt4 key购买 nike

我有一个包含五个属性的列表,每个属性有五个不同的值。我想生成它们的笛卡尔积并过滤所有唯一排列。

一些背景:

我需要它们作为我解决逻辑难题的输入值。我在其中对照他们检查规则以找到正确的解决方案。

from itertools import product

# input
names = ['Dana', 'Ingo', 'Jessica', 'Sören', 'Valerie']
ages = [26, 27, 30, 33, 35]
tops = ['Blouse', 'Poloshirt', 'Pullover', 'Sweatshirt', 'T-Shirt']
colors = ['blue', 'yellow', 'green', 'red', 'black']
sizes = ['XS', 'S', 'M', 'L', 'XL']

all_attributes = [names, ages, tops, colors, sizes]

# cartesian product (superset)
inputs = list(product(*all_attributes))

# the following code you do that...

也许一个简化的例子可以说明这一点。

数据:

[['Dana', 'Ingo'], [26, 27]]

数据的笛卡尔积:

[('Dana', 26), ('Dana', 27), ('Ingo', 26), ('Ingo', 27)]

我想要的:

[[('Dana', 26), ('Ingo', 27)],
[('Dana', 27), ('Ingo', 26)],
[('Ingo', 26), ('Dana', 27)],
[('Ingo', 27), ('Dana', 26)]]

我不想要的:

[[('Dana', 26), ('Ingo', 26)], ...

我不想多次出现相同的值。位置很重要,因此它应该具有置换字符,并且对于具有五个元素的列表列表也是如此。我猜想输出大小会很大而且可能无法计算,所以最好指定一些固定的位值。例如,我想将“Dana”设置为第一个元素名称。

输出:

[[('Dana', 26), ('Ingo', 27),
[('Dana', 27), ('Ingo', 26)]]

出于好奇,也许您可​​以告诉我这些概念的具体数学名称是什么,我需要哪些?


谜题:

五个 friend (Dana、Ingo、Jessica、Sören、Valerie)在购物中心的收银台排队等候。他们都是不同年龄的(26、27、30、33、35)并且想要购买不同的上衣(女衬衫、Polo 衫、套头衫、 Jersey 、T 恤)为他们自己。上衣有不同的颜色 (蓝色、黄色、绿色、红色、黑色) 和尺寸 (XS、S、M、L、XL)

规则:

  1. “Dana”最想买的是“XL”。在她身后(但不是正后方)是一个穿着“黑色”上衣的人。
  2. “Jessica”直接等在一个想买“Polo 衫”的人面前。
  3. 排在第二位的人想买一件“黄色”上衣。
  4. “T 恤”不是“红色”。
  5. “Sören”想买一件“ Jersey ”。直接等在他前面的人比他后面的人年长。
  6. “Ingo”需要一件尺寸为“L”的上衣。
  7. 排在最后的人是 30 岁。
  8. 年龄最大的人将购买尺寸最小的陀螺。
  9. 直接等在“Valerie”后面的人想买一件比“S”码大的“红色”上衣。
  10. 最小的那个想买一件“黄色”上衣。
  11. 杰西卡打算买一件“衬衫”。
  12. 排队的第三个人想买一件“M”码的上衣。
  13. “Polo 衫”为“红色”、“黄色”或“绿色”。

最佳答案

这样就可以了,但是需要很长时间。我减少了列表大小,因为您的请求选项有 24,883,200,000 个排列:

from itertools import permutations, product

names = ['Dana', 'Ingo']
ages = [26, 27]
tops = ['Hemd', 'Poloshirt']
colors = ['blau', 'gelb']
sizes = ['XS', 'S']

options = []

# Generate the Cartesian product of all permutations of the options.
for name,age,top,color,size in product(*map(permutations,[names,ages,tops,colors,sizes])):
# Build the option list. zip() transposes the individual lists.
option = list(zip(name,age,top,color,size))
options.append(option)
print(option)

输出:

[('Dana', 26, 'Hemd', 'blau', 'XS'), ('Ingo', 27, 'Poloshirt', 'gelb', 'S')]
[('Dana', 26, 'Hemd', 'blau', 'S'), ('Ingo', 27, 'Poloshirt', 'gelb', 'XS')]
[('Dana', 26, 'Hemd', 'gelb', 'XS'), ('Ingo', 27, 'Poloshirt', 'blau', 'S')]
[('Dana', 26, 'Hemd', 'gelb', 'S'), ('Ingo', 27, 'Poloshirt', 'blau', 'XS')]
[('Dana', 26, 'Poloshirt', 'blau', 'XS'), ('Ingo', 27, 'Hemd', 'gelb', 'S')]
[('Dana', 26, 'Poloshirt', 'blau', 'S'), ('Ingo', 27, 'Hemd', 'gelb', 'XS')]
[('Dana', 26, 'Poloshirt', 'gelb', 'XS'), ('Ingo', 27, 'Hemd', 'blau', 'S')]
[('Dana', 26, 'Poloshirt', 'gelb', 'S'), ('Ingo', 27, 'Hemd', 'blau', 'XS')]
[('Dana', 27, 'Hemd', 'blau', 'XS'), ('Ingo', 26, 'Poloshirt', 'gelb', 'S')]
[('Dana', 27, 'Hemd', 'blau', 'S'), ('Ingo', 26, 'Poloshirt', 'gelb', 'XS')]
[('Dana', 27, 'Hemd', 'gelb', 'XS'), ('Ingo', 26, 'Poloshirt', 'blau', 'S')]
[('Dana', 27, 'Hemd', 'gelb', 'S'), ('Ingo', 26, 'Poloshirt', 'blau', 'XS')]
[('Dana', 27, 'Poloshirt', 'blau', 'XS'), ('Ingo', 26, 'Hemd', 'gelb', 'S')]
[('Dana', 27, 'Poloshirt', 'blau', 'S'), ('Ingo', 26, 'Hemd', 'gelb', 'XS')]
[('Dana', 27, 'Poloshirt', 'gelb', 'XS'), ('Ingo', 26, 'Hemd', 'blau', 'S')]
[('Dana', 27, 'Poloshirt', 'gelb', 'S'), ('Ingo', 26, 'Hemd', 'blau', 'XS')]
[('Ingo', 26, 'Hemd', 'blau', 'XS'), ('Dana', 27, 'Poloshirt', 'gelb', 'S')]
[('Ingo', 26, 'Hemd', 'blau', 'S'), ('Dana', 27, 'Poloshirt', 'gelb', 'XS')]
[('Ingo', 26, 'Hemd', 'gelb', 'XS'), ('Dana', 27, 'Poloshirt', 'blau', 'S')]
[('Ingo', 26, 'Hemd', 'gelb', 'S'), ('Dana', 27, 'Poloshirt', 'blau', 'XS')]
[('Ingo', 26, 'Poloshirt', 'blau', 'XS'), ('Dana', 27, 'Hemd', 'gelb', 'S')]
[('Ingo', 26, 'Poloshirt', 'blau', 'S'), ('Dana', 27, 'Hemd', 'gelb', 'XS')]
[('Ingo', 26, 'Poloshirt', 'gelb', 'XS'), ('Dana', 27, 'Hemd', 'blau', 'S')]
[('Ingo', 26, 'Poloshirt', 'gelb', 'S'), ('Dana', 27, 'Hemd', 'blau', 'XS')]
[('Ingo', 27, 'Hemd', 'blau', 'XS'), ('Dana', 26, 'Poloshirt', 'gelb', 'S')]
[('Ingo', 27, 'Hemd', 'blau', 'S'), ('Dana', 26, 'Poloshirt', 'gelb', 'XS')]
[('Ingo', 27, 'Hemd', 'gelb', 'XS'), ('Dana', 26, 'Poloshirt', 'blau', 'S')]
[('Ingo', 27, 'Hemd', 'gelb', 'S'), ('Dana', 26, 'Poloshirt', 'blau', 'XS')]
[('Ingo', 27, 'Poloshirt', 'blau', 'XS'), ('Dana', 26, 'Hemd', 'gelb', 'S')]
[('Ingo', 27, 'Poloshirt', 'blau', 'S'), ('Dana', 26, 'Hemd', 'gelb', 'XS')]
[('Ingo', 27, 'Poloshirt', 'gelb', 'XS'), ('Dana', 26, 'Hemd', 'blau', 'S')]
[('Ingo', 27, 'Poloshirt', 'gelb', 'S'), ('Dana', 26, 'Hemd', 'blau', 'XS')]

关于python - 有没有办法生成项目列表的所有唯一排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56284249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com