我无法在网上找到这个问题的好方法(可能是因为开关,位置,列表和Python都是这样的重载词)。
这很简单 - 我有这个清单:
['title', 'email', 'password2', 'password1', 'first_name', 'last_name', 'next', 'newsletter']
我想切换'password2'
和'password1'
的位置 - 不知道他们的确切位置,只是他们彼此相邻而password2
是第一位。
我用一些相当冗长的列表下标完成了这个,但我想知道它可以提出一些更优雅的东西吗?
答案 0 :(得分:345)
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]
答案 1 :(得分:138)
简单的Python交换如下所示:
foo[i], foo[j] = foo[j], foo[i]
现在您需要做的就是i
是什么,可以使用index
轻松完成:
i = foo.index("password2")
答案 2 :(得分: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']
切片分配的右侧是“反转切片”,也可以拼写:
L[i:i+2] = reversed(L[i:i+2])
如果你发现它更具可读性,那就像许多人一样。
答案 3 :(得分:6)
它怎么能比
更长tmp = my_list[indexOfPwd2]
my_list[indexOfPwd2] = my_list[indexOfPwd2 + 1]
my_list[indexOfPwd2 + 1] = tmp
这只是使用临时存储的普通交换。
答案 4 :(得分:1)
哇!有一个更标准(适用于所有语言),简单和更短的方式!
x = i[2]; i[2] = i[3]; i[3] = x
简单比复杂更好
注意:如果您不知道该职位:
index = list.index("password1") # = 3 in the given list
答案 5 :(得分:0)
你可以使用例如:
>>> test_list = ['title', 'email', 'password2', 'password1', 'first_name',
'last_name', 'next', 'newsletter']
>>> reorder_func = lambda x: x.insert(x.index('password2'), x.pop(x.index('password2')+1))
>>> reorder_func(test_list)
>>> test_list
... ['title', 'email', 'password1', 'password2', 'first_name', 'last_name', 'next', 'newsletter']
答案 6 :(得分:0)
我不是python的专家,但你可以尝试: 说
i = (1,2)
res = lambda i: (i[1],i[0])
print 'res(1, 2) = {0}'.format(res(1, 2))
以上将o / p as:
res(1, 2) = (2,1)
答案 7 :(得分:0)
for i in range(len(arr)):
if l[-1] > l[i]:
l[-1], l[i] = l[i], l[-1]
break
因此,如果最后一个元素大于位置i
上的元素,则它们都将被交换。