我的不是真正的问题,而是寻找解决方案(如果有的话)。并且知道这种语言必然存在。我有一个整数“n”和一个整数“p”。我想要做的是将 n 分成数字,将它们提升到 p 并将它们放在一个列表中。稍后我将 sum() 列表。 (以下是代码)
tot = sum([int(x)**p for x in str(n)])
代码完美运行没有任何问题,我唯一想补充的是每次迭代时,'p'必须加1。我尝试了很多东西,并查看了其他一些方法,但找不到添加此步骤的正确语法。 我真的希望你们中的一些人可以帮助我找到这个解决方案。 非常感谢提前
答案 0 :(得分:3)
使用 enumerate
得到一个索引,你可以用它来增加 p
:
tot = sum([int(x) ** (p + i) for i, x in enumerate(str(n))])
如果您想从 p + 1
而不是 p + 0
开始,请使用
tot = sum([int(x) ** (p + i) for i, x in enumerate(str(n), start=1)])
顺便说一句,您甚至不需要创建列表。删除括号以节省一些内存:
tot = sum(int(x) ** (p + i) for i, x in enumerate(str(n)))
答案 1 :(得分:2)
您可以在列表推导式中使用 enumerate()
来实现:
>>> n = 12345
>>> p = 2
>>> sum([int(x)**(p+i) for i, x in enumerate(str(n))])
16739
enumerate()
返回一个元组,其中包含一个计数(来自 start
,默认为 0
)和通过迭代 iterable 获得的值。
如果您想以 1
开头,可以将 start 作为 p+1
传递:
>>> sum([int(x)**(p+i) for i, x in enumerate(str(n), start=1)])
82481
答案 2 :(得分:0)
基于 for 循环的潜在解决方案应该是
tot = []
p = <whatever>
for x in str(n):
temp = int(x) ** p
tot.append(temp)
p = p + 1
sum(tot)