在python中创建列表的一部分别名

时间:2015-08-03 21:57:51

标签: python list aliasing

有没有办法在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]

3 个答案:

答案 0 :(得分:6)

如果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]

使用基本索引进行切片会返回一个numpy的视图对象,因此任何更改都会反映在view对象中

或使用带有memoryview

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]

答案 1 :(得分:0)

您可以将每个元素嵌入到自己的可变数据结构中(例如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]]

但是,我建议尝试找出原始问题的解决方案(无论是什么),不会产生问题。

答案 2 :(得分:0)

您要查找的是原始列表的视图,以便任何修改都会反映在原始列表中。这对于numpy包中的数组是可行的:

>>> import numpy
>>> x = numpy.array([1, 2, 3])
>>> y = x[2:]
>>> y[0] = 999
>>> x
array([  1,   2, 999])