Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用函数交换索引片_Python_List_Python 3.x_Indexing_Swap - Fatal编程技术网

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::
,但是我被切片分配解包所困扰。这个答案结合了简单的方法和内存节省的就地切片分配,可能是效率和简单性的最佳组合。