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

标签 python list append iteration

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

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

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

但考虑到上面的代码永远不会完成 - 看起来列表正在被无限追加。

为什么会这样?

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

最佳答案

for 循环仅在到达列表对象的最后一个元素时停止;通过在循环体中添加一个元素,列表中总是会有更多元素。

在迭代时使用列表的副本,使用索引,或使用带有列表理解的 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]

关于python - 如何使用追加对列表中的每个项目进行平方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32655889/

相关文章:

python - 如何使用 twill 查看当前 url?

javascript - 查找函数参数的数量及其名称

javascript - jQuery 追加函数正在追加没有 css 样式的 div

python - 追加Python字典,如果值为空则不替换

python - 如何将 "Body"添加到 python mime 多部分(有附件)电子邮件

python - 如何检测 pynput 中的按键/释放

vb.net - VB中按第二列对列表进行排序

python - 如何复制列表/数组中的特定值?

python - 计算列表中某个元素的出现次数

java - 如何将 HashMap<String, ArrayList<String>> 存储在列表中?