Wie verschiebe ich in Python ein Element in einen bestimmten Index in einer Liste?
Wie verschiebe ich in Python ein Element in einen bestimmten Index in einer Liste?
Antworten:
Verwenden Sie die insert
Methode einer Liste:
l = list(...)
l.insert(index, item)
Alternativ können Sie eine Slice-Notation verwenden:
l[index:index] = [item]
Wenn Sie ein Element, das sich bereits in der Liste befindet, an die angegebene Position verschieben möchten, müssen Sie es löschen und an der neuen Position einfügen:
l.insert(newindex, l.pop(oldindex))
last index + 1
ohne Fehler einfügen . In diesem Fall wird das Element nur an die Liste angehängt.
a.insert(99999, 1)
In [14]: a
Out[14]: [...., 1]
Eine etwas kürzere Lösung, die den Gegenstand nur bis zum Ende bewegt, nicht irgendwo ist:
l += [l.pop(0)]
Beispielsweise:
>>> l = [1,2,3,4,5]
>>> l += [l.pop(0)]
>>> l
[2, 3, 4, 5, 1]
l.append(l.pop(0))
. Es ist nur unwesentlich länger, aber viel besser lesbar.
Wenn Sie die Position des Elements nicht kennen, müssen Sie möglicherweise zuerst den Index suchen:
old_index = list1.index(item)
dann bewege es:
list1.insert(new_index, list1.pop(old_index))
oder meiner Meinung nach sauberer:
try:
list1.remove(item)
list1.insert(new_index, item)
except ValueError:
pass
pass
Aussage zusammenzucken ... niemals Ausnahmen zu verbergen - die Standardeinstellung in einem Beispiel wie diesem sollte darin bestehen, eine sauberere Fehler- oder Druckanweisung bereitzustellen ... raise ValueError(f'Unable to move item to {new_index}')
oder print(f'Moving item to {new_index} failed. List remains unchanged.')
. Vielleicht pass
wäre es in Ordnung, wenn in einer Funktion try_to_move_item
oder so etwas, so dass verstanden wird, dass die Operation lautlos fehlschlagen könnte.
Eine sehr einfache Lösung, aber Sie müssen den Index der ursprünglichen Position und den Index der neuen Position kennen:
list1[index1],list1[index2]=list1[index2],list1[index1]
Ich habe einige Methoden zum Verschieben eines Elements innerhalb derselben Liste mit timeit vorgestellt. Hier sind diejenigen, die verwendet werden sollen, wenn j> i:
┌───────────────────────────────────┐ │ 14.4usec │ x [i: i] = x.pop (j), │ │ 14.5usec │ x [i: i] = [x.pop (j)] │ │ 15.2usec │ x.insert (i, x.pop (j)) │ └───────────────────────────────────┘
und hier diejenigen, die verwendet werden sollen, wenn j <= i:
┌────────────────────────────────────────┐ │ 14.4usec │ x [i: i] = x [j]; del x [j] │ │ 14.4usec │ x [i: i] = [x [j]]; del x [j] │ │ 15.4usec │ x.insert (i, x [j]); del x [j] │ └────────────────────────────────────────┘
Kein großer Unterschied, wenn Sie es nur ein paar Mal verwenden, aber wenn Sie schwere Dinge wie manuelles Sortieren ausführen, ist es wichtig, das schnellste zu nehmen. Ansonsten würde ich empfehlen, nur die zu nehmen, die Ihrer Meinung nach am besten lesbar ist.