Python 使用函数交换索引片
以下问题的后续行动: 如果我想使用函数交换片,正确的方法是什么Python 使用函数交换索引片,python,list,python-3.x,indexing,swap,Python,List,Python 3.x,Indexing,Swap,以下问题的后续行动: 如果我想使用函数交换片,正确的方法是什么 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]
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]
def交换(r、a、b、c、d):
断言a而不进行任何计算,您可以执行以下操作:
def swap(r,a,b,c,d):
assert a<=b<=c<=d
r[a:d]=r[c:d]+r[b:c]+r[a:b]
def交换(r、a、b、c、d):
断言a一个有趣的(但愚蠢的,B.M.的解决方案显然更好)解决方案是创建一个支持切片的对象:
class\u交换程序(对象):
定义初始化(self,li):
self.list=li
定义获取项目(自身,项目):
x=列表(项目)
断言len(x)==2和all(i表示x中的i)
self.list[x[0]],self.list[x[1]]=self.list[x[1]],self.list[x[0]]
def交换(li):
返回交换程序(li)
互换(r)[a:b,c:d]
一个有趣的解决方案(但很愚蠢,B.M.的解决方案显然更好)是创建一个支持切片的对象:
class\u交换程序(对象):
定义初始化(self,li):
self.list=li
定义获取项目(自身,项目):
x=列表(项目)
断言len(x)==2和all(i表示x中的i)
self.list[x[0]],self.list[x[1]]=self.list[x[1]],self.list[x[0]]
def交换(li):
返回交换程序(li)
互换(r)[a:b,c:d]
如果操作正确,它应该可以工作,即没有所有语法错误(from
不能用作变量名,并且2:4,4:7
不是切片的方式)。如果操作正确,它应该工作,即没有所有语法错误(from
不能用作变量名,2:4,4:7
不是切片的方式)很好,简单有效的方法。如果问题只是“我如何交换列表的部分?”我会做类似于返回r[:a]+r[c:d]+r[b:c]+r[a:b]+r[d:
,但我被切片分配解包卡住了。这个答案将简单方法与内存节省就地片分配相结合,这可能是效率和简单性的最佳组合。很好、简单、有效的方法。如果问题是“如何交换列表的部分?”我会做类似于返回r[:a]+r[c:d]+r[b:c]+r[a:b]+r的事情[d::
,但是我被切片分配解包所困扰。这个答案结合了简单的方法和内存节省的就地切片分配,可能是效率和简单性的最佳组合。