我无法在网上找到这个问题的好解决方案(可能因为交换机,位置,列表和Python都是这样的重载词).
这很简单 - 我有这个清单:
['title', 'email', 'password2', 'password1', 'first_name', 'last_name', 'next', 'newsletter']
Run Code Online (Sandbox Code Playgroud)
我想切换的位置'password2'
和'password1'
-不知道他们的确切位置,只知道他们是对彼此相邻并password2
是第一.
我用一些相当冗长的列表下标来完成这个,但我想知道它可能会提出一些更优雅的东西吗?
sam*_*gar 365
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]
Run Code Online (Sandbox Code Playgroud)
Can*_*der 151
简单的Python交换如下所示:
foo[i], foo[j] = foo[j], foo[i]
Run Code Online (Sandbox Code Playgroud)
现在您需要做的就是确定什么i
是,并且可以通过以下方式轻松完成index
:
i = foo.index("password2")
Run Code Online (Sandbox Code Playgroud)
Ale*_*lli 15
鉴于您的规格,我将使用切片分配:
>>> 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']
Run Code Online (Sandbox Code Playgroud)
切片分配的右侧是"反转切片",也可以拼写:
L[i:i+2] = reversed(L[i:i+2])
Run Code Online (Sandbox Code Playgroud)
如果你发现它更具可读性,那就像许多人一样.
它怎么会比...更长
tmp = my_list[indexOfPwd2]
my_list[indexOfPwd2] = my_list[indexOfPwd2 + 1]
my_list[indexOfPwd2 + 1] = tmp
Run Code Online (Sandbox Code Playgroud)
这只是使用临时存储的普通交换.