0

我试图在 python 3.7 中将多个数字组合在一起,但我没有运气。

我希望它是这样的:

1 + 4 + 5 = 145 

我知道这很简单,但我无处可去!

4

5 回答 5

4

您可以使用reduce数学方式执行此操作

>>> l = [1, 4, 5]
>>> 
>>> from functools import reduce
>>> reduce(lambda x,y: 10*x+y, l)
145

或者,您可以使用字符串 concat

>>> int(''.join(map(str, l)))
145
于 2018-07-30T17:47:58.763 回答
2

如果您想以数字方式执行此操作,请考虑以 10 为底的数字的含义:

145 = 1 * 10**2 + 4 * 10**1 + 5 * 10**0

所以,你需要得到 N 个从 N-1 到 0 的数字,与数字同步。一种方法是enumerate加上一些额外的算术:

def add_digits(*digits):
    total = 0
    for i, digit in enumerate(digits):
        total += digit * 10**(len(digits)-i-1)
    return total

现在:

>>> add_digits(1, 4, 5)
145

当然,这只适用于数字序列——你事先知道有多少个数字。如果您想使用任何可迭代的数字,甚至是生成器表达式或其他东西的迭代器,该怎么办?然后你可以重新考虑这个问题:

1456 = ((1 * 10 + 4) * 10 + 5) * 10 + 6

所以:

def add_digits(digits):
    total = 0
    for digit in digits:
        total = total * 10 + digit
    return total

>>> add_digits((1, 3, 5, 6))
1356
>>> add_digits(n for n in range(10) if n%2)
13579

请注意,您可以轻松地将任一版本扩展到其他基础:

def add_digits(*digits, base=10):
    total = 0
    for i, digit in enumerate(digits):
        total += digit * base**(len(digits)-i-1)
    return total

>>> hex(add_digits(1, 0xF, 2, 0xA, base=16))
'0x1f2a'

......这对于字符串版本来说并不那么容易;您不能只做int(''.join(map(str, digits)), base),而是需要str用一个转换为给定基数中的字符串的函数来替换它。有很多解决方案,但没有明显且可读的单行。

于 2018-07-30T17:53:52.797 回答
1

您应该尝试将数字转换为字符串!当你做这样的事情

str(1)+str(4)+str(5)

您将得到 145,但它将是一个字符串。如果您希望它之后成为一个数字,那么您可以将整个事物转换为一个整数。

int(str(1)+str(4)+str(5))

或者只是将答案设置为一个新变量并将其转换为整数。

于 2018-07-30T17:48:15.467 回答
0

最简单的方法是将它们连接为字符串,然后将其解析回一个数字。

x = str(1) + str(4) + str(5)
print(int(x))

或者

int(str(1) + str(4) + str(5))
于 2018-07-30T17:46:54.230 回答
0

您可以只编写一个将数字或任何其他对象/数据类型连接为字符串的函数

concatenate = lambda *args : ''.join([str(arg) for arg in args])

a = 1

print(concatenate(4, 5, 6))

print(concatenate(a, MagicNumber(1), "3"))

但在 python 中,您也可以创建一个类并编写魔术函数来控制类对象的添加、减去等方式。您可以创建一个类来存储一个数字并根据需要添加它。您可以将此代码保存在文件中并将其导入或粘贴到您自己的脚本中。

class MagicNumber():
    value = 0

    def __init__(self, value):
        self.value = int(value)

    def __str__(self):
        return str(self.value)

    def __int__(self):
        return self.value

    def __repr__(self):
        return self.value

    def __add__(self, b):
        return MagicNumber(str(self)+str(b))

if __name__ == "__main__":
    a = MagicNumber(4)
    b = MagicNumber(5)
    c = MagicNumber(6)

    print(a+b+c)

    #You could even do this but I strongly advise against it
    print(a+5+6)

这是有关这些“魔术方法”的文档的链接 https://docs.python.org/3/reference/datamodel.html

于 2018-07-30T18:21:10.123 回答