我可以在python中反转特定范围内的列表吗?

Pal*_*ary -2 python python-3.x

我的意思是假设我有一个列表,[1,2,3,4,5,6,7,8,9] 我想在特定范围内反转其编号,例如从 2 到 5,因此预期输出是[1,2,6,5,4,3,7,8,9]

注意:我不想使用循环并且通过交换每个值,不想使用额外的空间。是否可以?像 reverse() 函数

che*_*ner 5

没有这样的功能。如果您只想就地反转列表的一部分,您需要明确地这样做。

x = list(range(1, 10))
i = x.index(3)  # i = 2
j = x.index(6)   # j = 5
while i < j:
    x[i], x[j] = x[j], x[i]
    i += 1
    j -= 1
Run Code Online (Sandbox Code Playgroud)

您不能使用列表切片,因为切片操作会创建一个新列表。

(是的,ij使用额外的空间,元组解包也是如此,但它是一个恒定的空间量,与范围的大小无关。一些额外的空间是不可避免的。)

你也不能使用类似的东西

lst[2:6] = islice(lst, 5, 1, -1)
Run Code Online (Sandbox Code Playgroud)

因为步长不能为负。原因是它islice适用于任意迭代器,这意味着它只能在一个方向上遍历列表。向后迭代意味着在尝试定位范围的末尾时必须缓存值。