@ Rushys Antwort ist großartig und wahrscheinlich, was ich empfehlen würde.
Das heißt, wenn Sie aufeinander folgende Duplikate entfernen möchten, und Sie wollen es an Ort und Stelle tun (durch die Änderung der Liste, anstatt eine zweite zu schaffen), ist eine übliche Technik, den Weg rückwärts durch die Liste zu arbeiten :
def remove_consecutive_duplicates(lst):
for i in range(len(lst) - 1, 1, -1):
if lst[i] == lst[i-1]:
lst.pop(i)
x = ['a', 'b', 'b', 'c', 'd', 'd', 'd', 'e', 'f', 'f']
remove_consecutive_duplicates(x)
print(x) # ['a', 'b', 'c', 'd', 'e', 'f']
am Ende der Liste und rückwärts bewegen Mit dem Start, Sie das Problem der wegzulaufen das Ende der Liste vermeiden, weil Sie es verkürzt haben.
z. wenn Sie mit 'aabc' und bewegen nach vorne starten, werden Sie die Indizes 0, 1 verwenden, 2 und 3.
0
|
aabc
(Found a duplicate, so remove that element.)
1
|
abc
2
|
abc
3
|
abc <-- Error! You ran off the end of the list.
rückwärts gehend, werden Sie die Indizes 3, 2, 1, verwenden und 0 :
3
|
aabc
2
|
aabc
1
|
aabc
(Found a duplicate so remove that element.)
0
|
abc <-- No problem here!
Ist ein Teil Ihres Codes nicht vorhanden? Was ist "j"? Auf jeden Fall nehme ich an, dass das Problem darin besteht, dass Sie das letzte Mal kürzen, während Sie gehen. Zu dem Zeitpunkt, an dem "i" seinen Maximalwert erreicht, ist die Liste nicht mehr so lang, so dass Sie einen Indexfehler haben. – smarx
Was ist X_length und j? – kaitian521
Was ist 'X_length'? Was ist 'j'? Was soll X.pop ([j]) sein? –