我有一堆看起来像这样的列表:
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
我想交换元素如下:
final_l = [2, 1, 4, 3, 6, 5, 8, 7, 10, 9]
列表的大小可能有所不同,但是它们将始终包含偶数个元素。
我对Python相当陌生,目前正在这样做:
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
final_l = []
for i in range(0, len(l)/2):
final_l.append(l[2*i+1])
final_l.append(l[2*i])
我知道这不是真正的Pythonic,而是想使用更高效的工具。也许列表理解?
无需复杂的逻辑,只需通过切片和步骤重新排列列表即可:
In [1]: l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
In [2]: l[::2], l[1::2] = l[1::2], l[::2]
In [3]: l
Out[3]: [2, 1, 4, 3, 6, 5, 8, 7, 10, 9]
编辑带说明
我相信大多数观众已经熟悉列表切片和多重分配。如果您不这样做,我会尽力解释发生了什么(希望我不会让情况更糟)。
要了解列表切片,这里已经有一个很好的答案和列表切片符号的说明。简单的说:
a[start:end] # items start through end-1
a[start:] # items start through the rest of the array
a[:end] # items from the beginning through end-1
a[:] # a copy of the whole array
There is also the step value, which can be used with any of the above:
a[start:end:step] # start through not past end, by step
让我们看一下OP的要求:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # list l
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
0 1 2 3 4 5 6 7 8 9 # respective index of the elements
l[0] l[2] l[4] l[6] l[8] # first tier : start=0, step=2
l[1] l[3] l[5] l[7] l[9] # second tier: start=1, step=2
-----------------------------------------------------------------------
l[1] l[3] l[5] l[7] l[9]
l[0] l[2] l[4] l[6] l[8] # desired output
第一层将是:l[::2] = [1, 3, 5, 7, 9]
第二层将是:l[1::2] = [2, 4, 6, 8, 10]
由于我们要重新分配first = second
&second = first
,因此可以使用多个分配,并就地更新原始列表:
first , second = second , first
那是:
l[::2], l[1::2] = l[1::2], l[::2]
附带说明一下,要获取新列表而不更改原始列表l
,我们可以从分配一个新列表l
,然后执行上面的操作,即:
n = l[:] # assign n as a copy of l (without [:], n still points to l)
n[::2], n[1::2] = n[1::2], n[::2]
希望我不要让大家对这个添加的解释感到困惑。如果是这样,请帮助我的更新并使其更好:-)
问题内容: 有没有比在Python中交换两个列表元素更快的方法了 还是我不得不求助于Cython或Weave之类? 问题答案: 看起来Python编译器使用此构造优化了临时元组: 码: 输出: 两个加载,一个和两个保存,而三个加载和三个保存。您不太可能找到更快的机制。
我创建了一个元素列表,我想更新其中一个列表元素 这是对update方法的调用: 这是更新方法: 在该方法中,我收到警告“从方法生成函数”,并建议“方法‘update\elem’可能是‘static’” 更新列表元素而不收到警告的正确方法是什么?
问题内容: 我想保持添加到列表中的元素的顺序。因此,我在Java中使用了。 现在,我希望能够交换链接列表中的两个元素。首先,我找不到for 。同样,也无法在指定位置添加元素。 问题答案: 还有一个,你可以用它来交换的两个元素。还有和(都是由指定的方法)。所有这些操作都将因为a 而不是。
问题内容: 我在这样的列表中有一个元组/列表: python(在非常低的cpu / ram机器上运行)交换值的最快方法是什么… 当前使用: 有更好或更快速的方法吗??? 问题答案: 您可以使用地图: 或列表理解: 列表理解是首选方法,并且在需要lambda时,它比map快得多。但是请注意,列表理解具有严格的评估标准,也就是说,如果担心内存消耗,它将在绑定到变量后立即对其进行评估。 生成器 :
我必须编写一些代码,将Java8流的内容多次添加到列表中,我很难找到最好的方法。根据我在SO上读到的内容(主要是这个问题:如何将Java8流的元素添加到现有列表中)和其他地方,我将其缩小到以下选项: PS:在我的示例代码中,我使用作为需要在流上执行的任何操作的占位符
本文向大家介绍Python 修改列表中的元素方法,包括了Python 修改列表中的元素方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇Python 修改列表中的元素方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。