gpt4 book ai didi

python - 构建一个将多个枚举组合到一个巨大列表中的变量

转载 作者:行者123 更新时间:2023-12-01 06:05:00 24 4
gpt4 key购买 nike

我想想出最简单的方法来创建一个巨大的列表。

假设我有三个六面骰子,因此它们的值均为 randint(1,6)。我想要包含组合这 3 个数字的所有可能方式的值集,因此它可以是 die1 * die2 + die3 或可以是 die1 ** die3 - die2 等。

我想定义一些变量Z,它等于加法、减法、乘法等。这样,我可以说die1 Z die2 Z die3,它会给我一个巨大的列表,而无需我将其键入。这在Python中可能吗?任何想法将不胜感激。

最佳答案

这里要知道的关键是您可以将一个函数作为参数传递给另一个函数(或在列表中)。一旦你明白了这个问题就变得更容易解决。

如果您想要列表理解:

from operator import add,sub,mul,div
funcs = [add,sub,mul,div]
die = [1,2,3,4,5,6]

results = [f(x,y) if y != 0 else None for x in die for y in [g(z,w) for z in die for w in die for g in funcs] for f in funcs]

请注意,其中包含“None”,其中通常会发生被零除的情况。

如果你把它分成一个函数,那就更清楚了。它需要两个数字列表和一个操作列表并返回所有结果:

def results(funcs, xs, ys):
out = []
for f in funcs:
for x in xs:
for y in ys:
try:
out.append(f(x,y))
except ZeroDivisionError:
pass
return out

这不会发生被零除的情况。使用类似 results(funcs,die,results(funcs,die,die)) 来获取所有结果。

这两个结果都有很多重复项,因此根据您实际想要执行的操作,您可能需要一个 set 而不是 list

另外,只是想到了这一点,但根据您计划执行的操作,您可以获得结果来返回生成器:

def results(funcs, xs, ys):
for f in funcs:
for x in xs:
for y in ys:
try:
yield f(x,y)
except ZeroDivisionError:
pass

如果您正在处理非常大的结果集,但只想一一查看它们,那么这是比构建整个列表更好的选择。

关于python - 构建一个将多个枚举组合到一个巨大列表中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8569818/

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