@ Rushy의 대답은 훌륭하고 아마도 내가 권하는 것입니다.
연속 복제본을 제거하려는 경우 (위치를 변경하지 않고 목록을 수정하여)을 작성하려는 경우 한 가지 공통적 인 방법은 목록을 거꾸로 작업하는 것입니다 :
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']
목록의 끝에서 시작하여 뒤로 이동하여, 당신은 당신이 그것을 단축했기 때문에 목록의 끝을 실행의 문제를 피할 수 있습니다.
예. 당신이 'AABC'로 시작하고 앞으로 이동하는 경우, 당신은 인덱스 0, 1, 2 사용할 것, 뒤로 이동 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.
, 당신은 인덱스 3, 2, 1을 사용합니다, 0 :
3
|
aabc
2
|
aabc
1
|
aabc
(Found a duplicate so remove that element.)
0
|
abc <-- No problem here!
일부 코드가 누락 되었습니까? 'j' 란 무엇입니까? 어쨌든, 나는 당신이 가면서 마지막으로 짧아지고 있다는 것이 문제라고 생각합니다. 'i'가 최대 값에 도달 할 때까지 목록은 더 이상 길지 않으므로 색인 오류가 발생합니다. – smarx
X_length 및 j는 무엇입니까? – kaitian521
'X_length'는 무엇입니까? 'j' 란 무엇입니까? 'X.pop ([j])'는 무엇입니까? –