如何解决Pythonic交换?
我可能会在示例代码中更改一件事:如果您要使用一些长名称(例如self.memberlist
再次使用over),通常更容易将别名(“赋值”)命名为短名称。因此,例如,代替冗长而又难以阅读的内容:
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
,而不是副本(通过相同的标记,无论列表有多长,赋值都非常快,因为无论如何它都不会被复制-
只是一个更多参考)。
我认为并不需要进一步的复杂化,尽管当然很容易想到一些奇特的复杂性,例如(对于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]
我认为弄清楚这些“高级”用法是一种不错的自负,有益的心理锻炼和很好玩的乐趣-
我建议感兴趣的读者在大体上理解了这些概念之后,着重研究它们的作用以及它们+cmp
如何使事物起作用(a> b,a <b,a ==
b)的三种可能性[[不是负数,但是-
为什么不呢?切片器将需要更改以解决此问题?]]。但是,在生产代码中使用这种奇特的方法通常会显得过大且毫无根据,与简单的方法相比,使事情变得更加模糊和难以维护。
记住,简单胜于复杂!
解决方法
我发现我必须在python中执行交换,并且我写这样的东西。
arr[first],arr[second] = arr[second],arr[first]
我想这不是pythonic。有人知道如何在python中更优雅地进行交换吗?
编辑: 我认为另一个例子将显示我的怀疑
self.memberlist[someindexA],self.memberlist[someindexB] = self.memberlist[someindexB],self.memberlist[someindexA]
这是python中唯一可用的交换解决方案吗?我确实搜索了很多,但找不到一个好的答案…
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。