使用函数交换索引切片
Swap slices of indexes using a function
跟进问题:
r = ['1', '2', '3', '4', '5', '6', '7', '8']
如果我想交换切片,使用函数,正确的方法是什么?
def swap(from,to):
r[a:b+1], r[c+1:d] = r[c:d], r[a:b]
swap(a:b,c:d)
我想将 r 中的数字 3 + 4 与 5 + 6 + 7 交换:
swap(2:4,4:7)
这是正确的吗?
无需任何计算,您可以这样做:
def swap(r,a,b,c,d):
assert a<=b<=c<=d
r[a:d]=r[c:d]+r[b:c]+r[a:b]
一个有趣的(但很愚蠢,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]
跟进问题:
r = ['1', '2', '3', '4', '5', '6', '7', '8']
如果我想交换切片,使用函数,正确的方法是什么?
def swap(from,to):
r[a:b+1], r[c+1:d] = r[c:d], r[a:b]
swap(a:b,c:d)
我想将 r 中的数字 3 + 4 与 5 + 6 + 7 交换:
swap(2:4,4:7)
这是正确的吗?
无需任何计算,您可以这样做:
def swap(r,a,b,c,d):
assert a<=b<=c<=d
r[a:d]=r[c:d]+r[b:c]+r[a:b]
一个有趣的(但很愚蠢,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]