Как к положению переключателя двух объектов в списке Python?

Я не смог найти хорошее решение для этой проблемы в сети (вероятно, потому что переключатель, положение, список и Python являются всеми такими перегруженными словами).

Это довольно просто – у меня есть этот список:

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

Я хотел бы к положению переключателя 'password2' и 'password1' – не знание их точного положения, только что они друг прямо рядом с другом и password2 является первым.

Я выполнил это с некоторым довольно многоречивым индексированием списка, но я задался вопросом его возможное для предложения чего-то немного более изящного?

192
задан mikl 31 May 2019 в 09:20
поделиться

4 ответа

    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]
364
ответ дан 23 November 2019 в 05:29
поделиться

Как может он всегда будет длиннее, чем

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

. Это просто своп, использующий временное хранилище.

6
ответ дан 23 November 2019 в 05:29
поделиться

Простая замена Python выглядит так:

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

Теперь все, что вам нужно сделать, это выяснить, что i есть, и это легко сделать с помощью index :

i = foo.index("password2")
151
ответ дан 23 November 2019 в 05:29
поделиться

Учитывая ваши спецификации, я бы использовал назначение среза:

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

если вы сочтете это более читаемым, как многие бы.

15
ответ дан 23 November 2019 в 05:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: