所以,我知道如何做到这一点,但它似乎不太Pythonmee。有没有更干净的方法?你知道吗
arr = list(range(10))
print(arr)
for n in range(len(arr)):
# Perform som operation on the element that changes the value "in place"
arr[n] += 1
print(arr)
输出(这是我想要的):
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
他们说了什么。但如果要在创建列表时执行此操作,可以执行以下操作:
我猜你用的是python3。如果您使用的是Python 2,那么将
range
更改为xrange
(除非列表大小非常小),因为Python 2range
函数返回一个实际的list
,但是xrange
返回一个迭代器;Python 3range
函数返回一个与旧的xrange
类似的迭代器(但是有一些改进)。你知道吗如果
arr
是要修改的现有list
,而不使用新的list
对象替换当前的list
对象,则可以下面的一些代码说明了在赋值的左侧使用
arr
和arr[:]
之间的区别。你知道吗输出
因此
arr = [u + 1 for u in arr]
将名称arr
绑定到一个新的列表对象,但是arr[:] = [u + 1 for u in arr]
有效地改变了现有的列表对象。”它在hood下创建一个新的临时列表对象,然后将其内容复制到旧的列表对象。你知道吗您可以使用list comprehension:
这将生成一个新的列表;在上面的示例中,我将结果反弹到相同的名称。你知道吗
如果对列表有多个引用,并且需要就地更改它(以便其他引用可以看到更改),请指定给标识片(
[:]
)以更新列表的所有索引,而不是重新绑定名称:这将首先创建一个新的list对象,然后Python将非常聪明地看到两个列表的大小相同,并且在再次释放第二个列表之前只在元素之间进行复制。你知道吗
在这种情况下,您甚至可以使用生成器表达式来避免创建额外的列表:
这会将原始元素移到一边,以便为新元素腾出空间,但不会为此创建新的Python列表对象。这应该是一个小内存效率更高。你知道吗
使用列表理解:
相关问题 更多 >
编程相关推荐