使用函数交换索引切片

时间:2016-04-30 10:37:11

标签: python list python-3.x indexing swap

后续问题: Python swap indexes using slices

#include <iostream>  
#include <string>  
#include <vector>
#include <functional>
#include <memory>

using namespace std;

class A {
    string str;
public:
    A() = default;
    A(string _str): str(_str) {}
    string getStr() {
        return str;
    }
};

int main()
{
    unique_ptr<A[]> ptr = make_unique<A[]>(3);
}

如果我想交换切片,使用函数,那么正确的方法是什么?

r = ['1', '2', '3', '4', '5', '6', '7', '8'] 

我想在r:

中将数字3 + 4换成5 + 6 + 7
def swap(from,to):
  r[a:b+1], r[c+1:d] = r[c:d], r[a:b]

swap(a:b,c:d)

这是对的吗?

2 个答案:

答案 0 :(得分:6)

没有任何计算,你可以这样做:

def swap(r,a,b,c,d):
   assert a<=b<=c<=d  
   r[a:d]=r[c:d]+r[b:c]+r[a:b]

答案 1 :(得分:1)

一个有趣的(但很愚蠢,B. M.显然更好)解决方案是创建一个支持切片的对象:

class _Swapper(object):
    def __init__(self, li):
        self.list = li

    def __getitem__(self, item):
        x = list(item)
        assert len(x) == 2 and all(isinstance(i) for i in x)
        self.list[x[0]], self.list[x[1]] = self.list[x[1]], self.list[x[0]]

def swap(li):
    return _Swapper(li)

swap(r)[a:b, c:d]