Pythonic Swap of 2 lists elements(2个列表元素的古典式互换)
本文介绍了2个列表元素的古典式互换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我发现我必须在python语言中执行交换,我编写了如下内容:
arr[first], arr[second] = arr[second], arr[first]
我想这并不是那么僵化。有没有人知道如何用PYTHON更优雅地进行交换?
编辑: 我想再举一个例子来说明我的疑虑:
self.memberlist[someindexA], self.memberlist[someindexB] = self.memberlist[someindexB], self.memberlist[someindexA]
这是唯一可用于在Python中进行交换的解决方案吗?
推荐答案
我可能会在您的示例代码中更改一件事:如果您要反复使用某个长名称(如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
完全相同,而不是副本(出于同样的原因,不管列表有多长,赋值都非常快,因为无论如何它都不会被复制--它只是多一个引用)。
我不认为有必要进一步复杂化,尽管当然可以很容易地设想一些奇特的复杂情况,例如(对于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)[[不是负指数--为什么不是,Slip需要如何改变来解决这个问题?]]。但在生产代码中使用这种花哨的方法通常是矫枉过正的,而且完全没有根据,使事情比简单直接的方法更模糊,更难维护。
记住,simple is better than complex!
这篇关于2个列表元素的古典式互换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:2个列表元素的古典式互换
猜你喜欢
- 检查具有纬度和经度的地理点是否在 shapefile 中 2022-01-01
- 我如何卸载 PyTorch? 2022-01-01
- CTR 中的 AES 如何用于 Python 和 PyCrypto? 2022-01-01
- ";find_element_by_name(';name';)";和&QOOT;FIND_ELEMENT(BY NAME,';NAME';)";之间有什么区别? 2022-01-01
- 如何使用PYSPARK从Spark获得批次行 2022-01-01
- 计算测试数量的Python单元测试 2022-01-01
- YouTube API v3 返回截断的观看记录 2022-01-01
- 使用 Cython 将 Python 链接到共享库 2022-01-01
- 使用公司代理使Python3.x Slack(松弛客户端) 2022-01-01
- 我如何透明地重定向一个Python导入? 2022-01-01