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个列表元素的古典式互换
基础教程推荐
猜你喜欢
- 何时使用 os.name、sys.platform 或 platform.system? 2022-01-01
- 如何在海运重新绘制中自定义标题和y标签 2022-01-01
- 用于分类数据的跳跃记号标签 2022-01-01
- 使用PyInstaller后在Windows中打开可执行文件时出错 2022-01-01
- Python kivy 入口点 inflateRest2 无法定位 libpng16-16.dll 2022-01-01
- 如何让 python 脚本监听来自另一个脚本的输入 2022-01-01
- Dask.array.套用_沿_轴:由于额外的元素([1]),使用dask.array的每一行作为另一个函数的输入失败 2022-01-01
- 线程时出现 msgbox 错误,GUI 块 2022-01-01
- 在 Python 中,如果我在一个“with"中返回.块,文件还会关闭吗? 2022-01-01
- 筛选NumPy数组 2022-01-01