2个列表元素的古典式互换

原学程将引见二个列表元素的古典式交换的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

2个列表元素的古典式互换 教程 第1张

成绩描写

我发明我必需在python说话中履行交流,我编辑了以下实质:

arr[first], arr[second] = arr[second], arr[first]

我想这其实不是这么僵化。有甚么人晓得怎样用PYTHON更优雅天停止交流?

编纂:
我想再举1个例子去解释我的疑虑:

self.memberlist[someindexA], self.memberlist[someindexB] = self.memberlist[someindexB], self.memberlist[someindexA]

这是独一可用于在Python中停止交流的处理计划吗?

推举谜底

我能够会在您的示例代码中变动1件事:假如您要重复应用某个长称号(如self.memberlist),则起首将其别号("分派")为较短的称号平日更具可读性。比方,取代简短、易以浏览的:

self.memberlist[someindexA], self.memberlist[someindexB] = self.memberlist[someindexB], self.memberlist[someindexA]

您不妨编码:

L = self.memberlist
L[someindexA], L[someindexB] = L[someindexB], L[someindexA]

请忘住,Python是按援用任务的,是以L援用的对于象与self.memberlist完整雷同,而没有是正本(出于异样的缘由,不论列表有多长,赋值皆异常快,由于不管怎样它皆没有会被复制--它只是多1个援用)。

我没有以为有需要退1步庞杂化,虽然固然不妨很轻易天假想1些独特的庞杂情形,比方(关于a,b"正常"指数>=0):

def slicer(a, b):
  return slice(a, b+cmp(b,a), b-a), slice(b, a+cmp(a,b), a-b)

back, forth = slicer(someindexA, someindexB)
self.memberlist[back] = self.memberlist[forth]

我以为搞清晰这些"高等"用法是1种很佳的自信、有效的思想演习以及很佳的趣味--我修议感兴致的读者,1旦年夜意清晰了,便专注于这些+cmp的感化,和他们怎样针对于3种能够性(a>b,a<b,a==b)[[没有是背指数--为何没有是,Slip须要怎样转变去处理这个成绩?]]。但是在临盆代码中应用这类花梢的办法平日是过犹不及的,并且完整出有依据,使工作比简略直交的办法更隐约,更易保护。

忘住,simple is better than complex!

佳了闭于二个列表元素的古典式交换的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。