如何使用追加对列表中的每个项目进行平方?
How do I square each item in a list using append?
start_list = [5, 3, 1, 2, 4]
for i in start_list:
start_list.append(i**2)
我假设在迭代发生时每个列表项的值都分配给了 i。
但考虑到上面的代码永远不会完成 - 看起来列表正在被无限追加。
为什么会这样?
我怎样才能正确地编写它,以便它使用追加函数对每个元素进行平方。
for
循环只在到达列表对象的最后一个元素时停止;通过在循环体中添加 new 元素,列表中 always 将有更多元素。
迭代时使用列表的副本,使用索引,或使用 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]
在迭代列表时修改列表总是一个坏主意,因为任何修改都会添加到迭代器中。
最好的方法是使用列表理解:
start_list = [5, 3, 1, 2, 4]
start_list += [i**2 for i in start_list]
您在遍历列表时追加,因此它永远不会结束,因为它会无限增长。我只会使用 +
来连接,你可以使用列表推导来找出正方形。
>>> 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]
既然你想要一个使用追加的答案,那就给你 -
start_list = [5, 3, 1, 2, 4]
for i in range(len(start_list)):
start_list.append(start_list[i]**2)
您可以复制一份清单:
start_list = [5, 3, 1, 2, 4]
for i in list(start_list):
start_list.append(i**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]
start_list = [5, 3, 1, 2, 4]
for i in start_list:
start_list.append(i**2)
我假设在迭代发生时每个列表项的值都分配给了 i。
但考虑到上面的代码永远不会完成 - 看起来列表正在被无限追加。
为什么会这样?
我怎样才能正确地编写它,以便它使用追加函数对每个元素进行平方。
for
循环只在到达列表对象的最后一个元素时停止;通过在循环体中添加 new 元素,列表中 always 将有更多元素。
迭代时使用列表的副本,使用索引,或使用 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]
在迭代列表时修改列表总是一个坏主意,因为任何修改都会添加到迭代器中。
最好的方法是使用列表理解:
start_list = [5, 3, 1, 2, 4]
start_list += [i**2 for i in start_list]
您在遍历列表时追加,因此它永远不会结束,因为它会无限增长。我只会使用 +
来连接,你可以使用列表推导来找出正方形。
>>> 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]
既然你想要一个使用追加的答案,那就给你 -
start_list = [5, 3, 1, 2, 4]
for i in range(len(start_list)):
start_list.append(start_list[i]**2)
您可以复制一份清单:
start_list = [5, 3, 1, 2, 4]
for i in list(start_list):
start_list.append(i**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]