我已经在这个网站上研究了如何交换列表中的元素,但大多数情况都是交换一个元素与另一个元素。
在这里,我试图交换长度不相等的切片位置。 以一个示例列表为例:
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[0:4]
和x[5:7]
:#Expected output
x = [1, 4, 4, 6, 2, 4, 3, 5]
希望清楚地表达,交换的方式是将 slice1
的第一个元素占据了 slice2
的第一个元素的前一个位置。其余部分依次类推。
有没有一种简单而优雅且高效的方法来实现这个功能?
__set_item__
方法将跟踪先前的切片赋值并重新映射后续赋值的索引。使其高效 - 例如相对于分配数量的O(logN) - 将需要一个非平凡的数据结构来跟踪索引转换。 - nickie