2010-07-03 21 views
53

W języku Python, jak przenieść element do określonego indeksu na liście?Przenieść pozycję na liście?

+0

Możliwy duplikat [ Prosta składnia do wprowadzenia elementu listy na wierzch w pythonie?] (Https://stackoverflow.com/questions/1014523/simple-syntax-for-bring-a-list-element-to-the-front-in-python) –

Odpowiedz

96

Użyj metody insert wykazu:

l = list(...) 
l.insert(index, item) 

Alternatywnie, można użyć notacji plasterka:

l[index:index] = [item] 

Jeśli chcesz przenieść element, który znajduje się już na liście, aby określony pozycja, musisz go usunąć i wstawić na nową pozycję:

l.insert(newindex, l.pop(oldindex)) 
+15

Pamiętaj, że przenoszenie elementu już na liście za pomocą metody wstawiania/popowania będzie miało inne zachowanie w zależności od tego, czy poruszasz się w przód czy w tył o f lista. Przesuwając się w lewo, wstawiasz przed wybranym obiektem. Przechodząc do tyłu, wstawiasz po wybranym elemencie. Sprawdź, czy przejście do końca listy (błąd indeksu). – MKaras

+0

Jak przenosić wiele elementów? Biorąc pod uwagę listę a = [1,2,3,4,5,6,7,8,9], jak przekształcić ją na [1,2, [3,4,5], 6,7,8,9 ]? Czy można to zrobić w jednym kroku lub ze zrozumieniem listy? – g33kz0r

+0

@MKaras Testowałem to z Pythonem 3.5 i możesz wstawić do 'ostatniego indeksu + 1' bez błędów. W takim przypadku element jest po prostu dołączany do listy. – user2061057

17

Nieco krótsze rozwiązanie, które tylko przesuwa pozycję do końca, nie wszędzie jest taka:

l += [l.pop(0)] 

Na przykład:

>>> l = [1,2,3,4,5] 
>>> l += [l.pop(0)] 
>>> l 
[2, 3, 4, 5, 1] 
+3

Równie dobrze możesz użyć 'l.append (l.pop (0))'. Jest tylko nieznacznie dłuższy, ale jest o wiele bardziej czytelny. – CoreDumpError

+0

@CoreDumpError Tak, to robi to samo. Nauczyłem się składni '+ =' znacznie przed '.append()', stąd moje nastawienie do jej używania. – Tim

7

Jeśli nie znamy położenie elementu, ty może trzeba znaleźć indeks pierwszy:

old_index = list1.index(item) 

następnie przenieść go:

list1.insert(new_index, list1.pop(old_index)) 

lub IMHO czystszy sposób:

try: 
    list1.remove(item) 
    list1.insert(new_index, item) 
except ValueError: 
    pass 
1

Rozwiązanie bardzo proste, ale trzeba wiedzieć, indeks pozycji wyjściowej oraz wskaźnik nowej pozycji:

list1[index1],list1[index2]=list1[index2],list1[index1] 
+1

To jest wymiana, a nie ruch. – juzzlin

Powiązane problemy