指列表的一部分,好像它是一个列表

2024-05-03 22:02:45 发布

您现在位置:Python中文网/ 问答频道 /正文

是否有任何方法可以将列表的一个子部分作为列表,并将更改反映回源列表?例如:

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)

Tags: of方法right列表hererangesomeleft
3条回答

可能numpy数组就是您要找的。切片numpy数组返回的是视图,而不是副本。见http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#basic-slicing

使用列表不可能做到这一点,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]

y的修改不可能直接影响x,但是可以使用片分配来用y中的值更新x。例如:

>>> 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])上完成这一切。你知道吗

相关问题 更多 >