将列表的一部分称为列表本身

时间:2013-04-12 20:17:05

标签: python python-3.x

有没有办法获取列表的子部分,它充当列表,并且更改会反映回源列表?例如:

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)

3 个答案:

答案 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])上完成所有操作。