如何在Python列表中交换两个项目的位置?

2024-04-20 04:04:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我在网上找不到解决这个问题的好办法(可能是因为switch、position、list和Python都是这样的重载词)。

很简单,我有一个清单:

['title', 'email', 'password2', 'password1', 'first_name', 'last_name', 'next', 'newsletter']

我想切换'password2''password1'的位置-不知道它们的确切位置,只知道它们彼此相邻,password2是第一个。

我已经完成了一些相当冗长的清单订阅,但我想它可能会想出一些更优雅的东西?


Tags: nametitleemailpositionlistnextfirstlast
3条回答
    i = ['title', 'email', 'password2', 'password1', 'first_name', 
         'last_name', 'next', 'newsletter']
    a, b = i.index('password2'), i.index('password1')
    i[b], i[a] = i[a], i[b]

简单的Python交换如下:

foo[i], foo[j] = foo[j], foo[i]

现在你只需要弄清楚i是什么,这很容易用index完成:

i = foo.index("password2")

考虑到你的规格,我会使用slice赋值:

>>> L = ['title', 'email', 'password2', 'password1', 'first_name', 'last_name', 'next', 'newsletter']
>>> i = L.index('password2')
>>> L[i:i+2] = L[i+1:i-1:-1]
>>> L
['title', 'email', 'password1', 'password2', 'first_name', 'last_name', 'next', 'newsletter']

切片分配的右侧是“反向切片”,也可以拼写为:

L[i:i+2] = reversed(L[i:i+2])

如果你觉得更易读的话,很多人都会。

相关问题 更多 >