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]
请注意,如果包含“无”,则通常会发生被零除的情况。你知道吗
不过,如果你把它分解成一个函数,会更清楚。它接受两个数字列表和一个操作列表,并返回所有结果:
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
这里要知道的关键是,可以将函数作为参数传递给另一个函数(或在列表中)。一旦你明白这个问题变得更容易解决。你知道吗
如果您想要列表:
请注意,如果包含“无”,则通常会发生被零除的情况。你知道吗
不过,如果你把它分解成一个函数,会更清楚。它接受两个数字列表和一个操作列表,并返回所有结果:
在被零除的情况下,这没有任何意义。使用like
results(funcs,die,results(funcs,die,die))
获得所有结果。你知道吗这两种方法的结果都有很多重复之处,因此根据您实际想要做的事情,您可能希望使用
set
而不是list
。你知道吗另外,考虑一下,但是根据您计划做什么,您可以让
results
返回一个生成器:如果您正在处理非常大的结果集,但只想逐个查看它们,这是一个比构建整个列表更好的选择。你知道吗
我想你想问的是如何最好地重载python中笛卡尔积的操作符。你知道吗
尝试从
itertools
使用product
:相关问题 更多 >
编程相关推荐