【发布时间】:2017-10-31 22:56:47
【问题描述】:
我已经研究过在本网站的列表中交换元素,但大多数情况下都是处理一个元素与另一个元素的交换。
在这里,我试图交换不等长切片的位置。示例列表:
x = [6,2,4,3,4,1,4,5]
我希望有一种优雅的方式来交换列表和变量中的值,例如下面的形式:
x[0:1], x[1:7] = x[1:7], x[0:1]
#Expected output
x = [2, 4, 3, 4, 1, 4, 5, 6]
不出所料,它不起作用,它交换了前两个元素:
#Actual output
x = [2, 6, 4, 3, 4, 1, 4, 5]
另一个例子:用x[5:7]交换x[0:4]:
#Expected output
x = [1, 4, 4, 6, 2, 4, 3, 5]
我希望很清楚交换是这样的,slice1 的第一个元素占据了slice2 的第一个元素的先前位置。其余的如下。
有没有一种简单的方法可以优雅而高效地做到这一点?
【问题讨论】:
-
我能看到的支持涉及切片的任意序列分配的唯一“优雅”方法是定义一个包装列表的自定义对象,其
__set_item__方法将跟踪以前的切片分配并重新映射以下的索引。提高效率——例如O(logN) w.r.t.分配的数量 --- 将需要一个重要的数据结构来跟踪索引转换。
标签: python python-3.x list