我一直在尝试解决这个涉及排列的 Python 问题。例如,这就是我调用函数时应该发生的情况:
组合(2, 3) ➞ 6
组合(3, 7, 4) ➞ 84
组合(2, 3, 4, 5) ➞ 120
我不知道为什么但是当我调用它时(在下面)它出于某种原因返回 2。我知道计算机只是按照说明进行操作,所以我的代码肯定有问题。不知道是什么,求大神指点!谢谢!
def combinations(*items):
permu = []
for i in range(0, len(items)):
if i == 0:
permu.append(items[i]*items[i+1])
else:
permu.append(items[i]*permu[i-1])
return sum(permu)
print(combinations(1,2,3,4))
答案 0 :(得分:3)
如果您使用的是 python > 3.8,那么您可以简单地使用 math.prod
:
import math
def combinations(*items):
return math.prod(items)
答案 1 :(得分:0)
您可以创建一个包含所有数字的列表并遍历它。
def combinations(*items):
mult_list = list(items)
result = 1
for mult in mult_list:
result *= mult
return result
print(combinations(2, 3, 4, 5))
答案 2 :(得分:-1)
这是我能想到的最短的解决方案:
def combinations(tuple_):
exec(f'print({"*".join([str(n) for n in tuple_])})')
combinations((2, 3, 4, 5))
exec()
基本上将给定的字符串解释为 python 代码并执行它,所以在这种情况下它打印出 2 * 3 * 4 * 5 因为因为它们都是字符串然后转换为 python 字符串部分“消失”所以它们又是整数。 (如果您希望它们是字符串,您必须明确声明)将元组中的整数转换为字符串也很重要,这就是为什么有列表理解它为每个 n 创建一个字符串 n 的列表元组