用 for 循环 python 填充列表

时间:2021-02-07 16:23:09

标签: python list loops for-loop iterator

我的不是真正的问题,而是寻找解决方案(如果有的话)。并且知道这种语言必然存在。我有一个整数“n”和一个整数“p”。我想要做的是将 n 分成数字,将它们提升到 p 并将它们放在一个列表中。稍后我将 sum() 列表。 (以下是代码)

tot = sum([int(x)**p for x in str(n)])

代码完美运行没有任何问题,我唯一想补充的是每次迭代时,'p'必须加1。我尝试了很多东西,并查看了其他一些方法,但找不到添加此步骤的正确语法。 我真的希望你们中的一些人可以帮助我找到这个解决方案。 非常感谢提前

3 个答案:

答案 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)