如何在函数中返回数字的组合?

时间:2021-04-13 12:01:02

标签: python python-3.x list

我一直在尝试解决这个涉及排列的 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))

3 个答案:

答案 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 的列表元组

相关问题