Jak w Pythonie przenieść element do określonego indeksu na liście?
104
Użyj insert
metody listy:
l = list(...)
l.insert(index, item)
Alternatywnie możesz użyć notacji plasterków:
l[index:index] = [item]
Jeśli chcesz przenieść element, który jest już na liście do określonej pozycji, musisz go usunąć i wstawić w nowym miejscu:
l.insert(newindex, l.pop(oldindex))
last index + 1
bez błędów. W takim przypadku element jest po prostu dodawany do listy.a.insert(99999, 1)
In [14]: a
Out[14]: [...., 1]
Nieco krótsze rozwiązanie, które tylko przenosi element na koniec, nigdzie nie jest to:
Na przykład:
źródło
l.append(l.pop(0))
. Jest tylko nieznacznie dłuższy, ale jest znacznie bardziej czytelny.Jeśli nie znasz pozycji elementu, może być konieczne znalezienie najpierw indeksu:
następnie przesuń go:
lub IMHO czystszy sposób:
źródło
pass
oświadczenia ... nigdy nie ukrywaj wyjątków - domyślną rzeczą w takim przykładzie powinno być podanie bardziej przejrzystego komunikatu błędu lub wypisania instrukcji ...raise ValueError(f'Unable to move item to {new_index}')
lubprint(f'Moving item to {new_index} failed. List remains unchanged.')
. Możepass
byłoby w porządku, gdyby funkcja została wywołanatry_to_move_item
lub coś, co zrozumiałoby, że operacja może się nie powieść po cichu.Rozwiązanie bardzo proste, ale musisz znać indeks pierwotnej pozycji i indeks nowej pozycji:
źródło
Wyprofilowałem kilka metod przenoszenia elementu na tej samej liście z czasem. Oto te, których należy użyć, jeśli j> i:
a tutaj te, których należy użyć, jeśli j <= i:
Nie jest to duża różnica, jeśli używasz go tylko kilka razy, ale jeśli robisz ciężkie rzeczy, takie jak ręczne sortowanie, ważne jest, aby wybrać najszybszy. W przeciwnym razie radziłbym po prostu wziąć ten, który uważasz za najbardziej czytelny.
źródło