如何使用追加对列表中的每个项目进行平方?

时间:2015-09-18 15:34:47

标签: python list append iteration

start_list = [5, 3, 1, 2, 4]

for i in start_list:
    start_list.append(i**2)

我假设在迭代发生时将每个列表项的值分配给i。

但鉴于上面的代码永远不会完成 - 看起来列表是无限附加的。

为什么会这样?

我怎样才能正确地写这个,以便使用追加函数对每个元素进行平方。

6 个答案:

答案 0 :(得分:4)

for循环仅在到达列表对象的最后一个元素时停止;通过在循环体中添加 new 元素,始终将成为列表中的更多元素。

在迭代时使用列表副本,使用索引或使用list.extend()列表理解:

for i in start_list[:]:  # a copy won't grow anymore.
    start_list.append(i ** 2)

for idx in range(len(start_list)):  # the range is created just once
    start_list.append(start_list[idx] ** 2)

start_list.extend([i ** 2 for i in start_list]) # Append items from a new list
start_list += [i ** 2 for i in start_list]  # ditto, different spelling

如果你真的想用它们的平方等值替换,只需从旧的生成一个新列表:

start_list = [i ** 2 for i in start_list]

答案 1 :(得分:2)

您可以复制一份清单:

start_list = [5, 3, 1, 2, 4]

for i in list(start_list):
    start_list.append(i**2)

答案 2 :(得分:2)

您遇到了问题,因为在每次迭代中,您都要附加一个新元素,因此它永远不会完成。

对我来说,你想用它的平方值替换每个项目。如果你想要,你可以这样做:

start_list = [5, 3, 1, 2, 4]
for index, i in enumerate(start_list):
    start_list[index] = i*i
print start_list

输出:

[25, 9, 1, 4, 16]

使用列表理解,解决方案将如下:

[i*i for i in start_list]

输出:

[25, 9, 1, 4, 16]

答案 3 :(得分:1)

在迭代时修改列表总是一个坏主意,因为任何修改都会添加到迭代器中。

执行此操作的最佳方法是使用列表解析:

start_list = [5, 3, 1, 2, 4]
start_list += [i**2 for i in start_list]

答案 4 :(得分:1)

你在迭代列表时追加,所以它永远不会随着它无限增长而结束。我只想使用+连接,你可以使用列表推导来计算方块。

>>> start_list = [5, 3, 1, 2, 4]
>>> start_list += [i**2 for i in start_list]
>>> start_list
[5, 3, 1, 2, 4, 25, 9, 1, 4, 16]

答案 5 :(得分:1)

既然你想要一个使用追加的答案,你可以去 -

start_list = [5, 3, 1, 2, 4]

for i in range(len(start_list)):
    start_list.append(start_list[i]**2)