有没有办法获取列表的子部分,它充当列表,并且更改会反映回源列表?例如:
x = list(range(10))
y = [some subsection of x] # What goes here?
y.reverse()
print(x)
所需的输出,请注意元素3到7的反转:
[0, 1, 2, 7, 6, 5, 4, 3, 8, 9]
如果无法做到这一点,是否有其他设施可以提供类似的功能?
这可能是我想要做的事情的一个更好的例子,据我所知,切片分配不能处理它。至少,不是很优雅。递归快速排序:
def QuickSort(x):
left,right = Partition(x)
QuickSort(left)
QuickSort(right)
答案 0 :(得分:2)
你正在寻找 numpy 数组。切片 numpy 数组会返回一个视图,而不是一个副本。见http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#basic-slicing
答案 1 :(得分:2)
使用列表无法执行此操作,numpy通常会执行此操作。也就是说,列表片是副本,但是numpy数组的片是视图。
import numpy as np
x = np.arange(10)
y = x[3:6]
y[:] = 1
print y # [1 1 1]
print x # [0 1 2 1 1 1 6 7 8 9]
答案 2 :(得分:0)
无法对y
进行修改直接影响x
,但您可以使用切片分配来使用x
中的值更新y
。例如:
>>> x = list(range(10))
>>> y = x[3:8]
>>> y.reverse()
>>> x[3:8] = y
>>> x
[0, 1, 2, 7, 6, 5, 4, 3, 8, 9]
当然,您可以在一行x[3:8] = reversed(x[3:8])
上完成所有操作。