2

有没有办法获取列表的一个子部分,作为列表,并且更改会反映回源列表?例如:

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)
4

3 回答 3

2

您正在寻找的可能是numpy数组。切片numpy数组返回一个视图,而不是一个副本。请参阅http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#basic-slicing

于 2013-04-12T20:24:16.397 回答
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]
于 2013-04-12T20:27:50.263 回答
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]).

于 2013-04-12T20:21:15.007 回答