在 python 中创建部分列表的别名
Create alias of part of a list in python
有没有办法为 python 中的列表的一部分获取别名?
具体来说,我希望发生类似的情况:
>>> l=[1,2,3,4,5]
>>> a=l
>>> l[0]=10
>>> a
[10, 2, 3, 4, 5]
但我得到的是:
>>> l=[1,2,3,4,5]
>>> a=l[0:2]
>>> l[0]=10
>>> a
[1, 2]
如果 numpy 是一个选项:
import numpy as np
l = np.array(l)
a = l[:2]
l[0] = 10
print(l)
print(a)
输出:
[10 2 3 4 5]
[10 2]
使用基本索引切片 returns 使用 numpy 的视图对象,因此任何更改都会反映在 view 对象中
或使用 memoryview with an array.array:
from array import array
l = memoryview(array("l", [1, 2, 3, 4,5]))
a = l[:2]
l[0]= 10
print(l.tolist())
print(a.tolist())
输出:
[10, 2, 3, 4, 5]
[10, 2]
您可以将每个元素嵌入到它自己的可变数据结构中(如 list
)。
>>> l=[1,2,3,4,5]
>>> l = [[item] for item in l]
>>> l
[[1], [2], [3], [4], [5]]
>>> a = l[:2]
>>> a
[[1], [2]]
>>> l[0][0] = 10
>>> l
[[10], [2], [3], [4], [5]]
>>> a
[[10], [2]]
但是,我建议尝试为您的原始问题(无论是什么)提出一个不会产生其自身问题的解决方案。
您要查找的是原始列表的视图,以便任何修改都反映在原始列表中。这对于 numpy 包中的数组是可行的:
>>> import numpy
>>> x = numpy.array([1, 2, 3])
>>> y = x[2:]
>>> y[0] = 999
>>> x
array([ 1, 2, 999])
有没有办法为 python 中的列表的一部分获取别名?
具体来说,我希望发生类似的情况:
>>> l=[1,2,3,4,5]
>>> a=l
>>> l[0]=10
>>> a
[10, 2, 3, 4, 5]
但我得到的是:
>>> l=[1,2,3,4,5]
>>> a=l[0:2]
>>> l[0]=10
>>> a
[1, 2]
如果 numpy 是一个选项:
import numpy as np
l = np.array(l)
a = l[:2]
l[0] = 10
print(l)
print(a)
输出:
[10 2 3 4 5]
[10 2]
使用基本索引切片 returns 使用 numpy 的视图对象,因此任何更改都会反映在 view 对象中
或使用 memoryview with an array.array:
from array import array
l = memoryview(array("l", [1, 2, 3, 4,5]))
a = l[:2]
l[0]= 10
print(l.tolist())
print(a.tolist())
输出:
[10, 2, 3, 4, 5]
[10, 2]
您可以将每个元素嵌入到它自己的可变数据结构中(如 list
)。
>>> l=[1,2,3,4,5]
>>> l = [[item] for item in l]
>>> l
[[1], [2], [3], [4], [5]]
>>> a = l[:2]
>>> a
[[1], [2]]
>>> l[0][0] = 10
>>> l
[[10], [2], [3], [4], [5]]
>>> a
[[10], [2]]
但是,我建议尝试为您的原始问题(无论是什么)提出一个不会产生其自身问题的解决方案。
您要查找的是原始列表的视图,以便任何修改都反映在原始列表中。这对于 numpy 包中的数组是可行的:
>>> import numpy
>>> x = numpy.array([1, 2, 3])
>>> y = x[2:]
>>> y[0] = 999
>>> x
array([ 1, 2, 999])