파이썬 목록에서 두 항목의 위치를 ​​전환하는 방법은 무엇입니까? 그물 에서이 문제에 대한 좋은 해결책을 찾지

나는 그물 에서이 문제에 대한 좋은 해결책을 찾지 못했습니다 (아마도 스위치, 위치, 목록 및 Python이 모두 과부하 된 단어이기 때문에).

다소 간단합니다.이 목록이 있습니다.

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

나는의 위치를 전환하고 싶습니다 'password2'그리고 'password1'그들은 바로 옆에 서로에게있어 유일한 것으로, 자신의 정확한 위치를 모르고 – password2처음이다.

나는 다소 오래 걸리는 목록 첨자 로이 작업을 수행했지만 조금 더 우아한 것을 생각 해낼 수 있을지 궁금해 했습니까?



답변

    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]


답변

간단한 파이썬 스왑은 다음과 같습니다 :

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

이제 당신이해야 할 일은 무엇인지 파악하는 i것입니다 index.

i = foo.index("password2")


답변

귀하의 사양이 주어지면 슬라이스 할당을 사용합니다.

>>> 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])

더 많은 것을 읽을 수 있다면,


답변

어떻게 더 길어질 수 있을까

tmp = my_list[indexOfPwd2]
my_list[indexOfPwd2] = my_list[indexOfPwd2 + 1]
my_list[indexOfPwd2 + 1] = tmp

임시 저장소를 사용하는 단순한 스왑입니다.


답변

for i in range(len(arr)):
    if l[-1] > l[i]:
        l[-1], l[i] = l[i], l[-1]
        break

마지막 요소가 위치의 요소보다 큰 경우 i둘 다 스왑됩니다.


답변

예를 들어 다음을 사용할 수 있습니다.

>>> 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']


답변

나는 파이썬 전문가가 아니지만 시도해 볼 수 있습니다.

i = (1,2)

res = lambda i: (i[1],i[0])
print 'res(1, 2) = {0}'.format(res(1, 2)) 

위와 같이 o / p를 줄 것이다 :

res(1, 2) = (2,1)