Python代码简化?一行,在列表中添加全部

时间:2010-06-29 22:58:10

标签: python

我正在通过项目Euler,我正在尝试编写最简洁的代码。我知道这是可能的,所以我怎样才能简化以下代码。最好,我希望它是一行,而不是使用int-> string-> int转换。

问题:数字2 1000 的数字总和是多少?

我的回答:

>>> i=0
>>> for item in [int(n) for n in str(2**1000)];i+=item

3 个答案:

答案 0 :(得分:16)

sum(int(n) for n in str(2**1000))

答案 1 :(得分:3)

不是单行,但看起来更干净的生成器解决方案,也避免了int-> string-> int转换:

def asDigits(n):
    while n:
        n,d = divmod(n,10)
        yield d

print sum(asDigits(2**1000))

给予1366。

有趣的是,2 ** 10000中的数字总和为13561,其数字加起来与1366相同。

当然,如果以二进制表示,2 ** 1000中的数字之和为1.(我甚至在脑海里做过!)

答案 2 :(得分:0)

单个int到str转换以获取长度:

int(sum(map(lambda x:2**1000/x % 10, (10**x for x in xrange(len(str(2**1000)))))))