Jak zmienić pozycję dwóch pozycji na liście Pythona?
Nie udało mi się znaleźć dobrego rozwiązania tego problemu w sieci (prawdopodobnie dlatego, że switch, position, list i Python to takie przeciążone słowa).
To dość proste – mam taką listę:
['title', 'email', 'password2', 'password1', 'first_name', 'last_name', 'next', 'newsletter']
Chciałbym zmienić pozycję 'password2'
i 'password1'
- nie znając ich dokładnej pozycji, tylko to, że są tuż obok siebie i password2
jest pierwszy.
Udało mi się to osiągnąć dzięki dość długofalowemu subskrybowaniu listy, ale zastanawiałem się, czy jest to możliwe masz coś bardziej eleganckiego?
8 answers
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]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-22 16:31:49
Prosty Python swap wygląda tak:
foo[i], foo[j] = foo[j], foo[i]
Teraz wszystko, co musisz zrobić, to dowiedzieć się, czym jest i
, a to można łatwo zrobić za pomocą index
:
i = foo.index("password2")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-22 16:30:05
Biorąc pod uwagę twoje specyfikacje, użyłbym slice-assignment:
>>> 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']
Po prawej stronie przypisania slice jest "odwrócony slice" i może być również napisane:
L[i:i+2] = reversed(L[i:i+2])
Jeśli uznasz to za bardziej czytelne, tak jak wielu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-22 16:35:28
Jak może być dłużej niż
tmp = my_list[indexOfPwd2]
my_list[indexOfPwd2] = my_list[indexOfPwd2 + 1]
my_list[indexOfPwd2 + 1] = tmp
To zwykła zamiana za pomocą tymczasowego magazynu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-22 16:27:40
Możesz użyć na przykład:
>>> 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']
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-20 07:58:10
for i in range(len(arr)):
if l[-1] > l[i]:
l[-1], l[i] = l[i], l[-1]
break
W wyniku tego, jeśli ostatni element jest większy niż element w pozycji i
, to oba zostaną zamienione .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-15 03:42:50
Nie jestem ekspertem w Pythonie, ale możesz spróbować: powiedz
i = (1,2)
res = lambda i: (i[1],i[0])
print 'res(1, 2) = {0}'.format(res(1, 2))
Powyżej dałoby o / P jako:
res(1, 2) = (2,1)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-06 12:09:15
Wow! Istnieje znacznie bardziej standardowy (dotyczy wszystkich języków), prosty i krótszy sposób!
x = i[2]; i[2] = i[3]; i[3] = x
Proste jest lepsze niż złożone
Uwaga: Jeśli nie znasz pozycji:
index = list.index("password1") # = 3 in the given list
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-13 22:09:40