답변:
insert
목록 의 방법을 사용하십시오 .
l = list(...)
l.insert(index, item)
또는 슬라이스 표기법을 사용할 수 있습니다.
l[index:index] = [item]
목록에 이미있는 항목을 지정된 위치로 이동하려면 항목을 삭제하고 새 위치에 삽입해야합니다.
l.insert(newindex, l.pop(oldindex))
last index + 1
오류없이 삽입 할 수 있습니다. 이 경우 요소는 목록에 추가됩니다.
a.insert(99999, 1)
In [14]: a
Out[14]: [...., 1]
항목을 끝까지 만 이동하는 약간 더 짧은 솔루션은 다음과 같습니다.
l += [l.pop(0)]
예를 들면 :
>>> l = [1,2,3,4,5]
>>> l += [l.pop(0)]
>>> l
[2, 3, 4, 5, 1]
l.append(l.pop(0))
. 약간 더 길지만 훨씬 더 읽기 쉽습니다.
항목의 위치를 모르는 경우 먼저 색인을 찾아야 할 수 있습니다.
old_index = list1.index(item)
그런 다음 이동하십시오.
list1.insert(new_index, list1.pop(old_index))
또는 IMHO 더 깨끗한 방법 :
try:
list1.remove(item)
list1.insert(new_index, item)
except ValueError:
pass
pass
진술 에 절규하는 것이 옳다고 생각 합니다 ... 예외를 숨기지 마십시오-이와 같은 예제의 기본은 더 깨끗한 오류 진술이나 인쇄 진술을 제공하는 것입니다 ... raise ValueError(f'Unable to move item to {new_index}')
또는 print(f'Moving item to {new_index} failed. List remains unchanged.')
. 어쩌면 pass
함수에서 호출하면 괜찮을 것 try_to_move_item
또는 뭔가 그래서 그 작업이 자동으로 실패 할 수 있음을 이해했다.
timeit을 사용하여 동일한 목록 내에서 항목을 이동하는 몇 가지 방법을 프로파일 링했습니다. 다음은 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)) │ └──────────┴──────────────────────┘
여기에 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] │ └──────────┴───────────────────────────┘
몇 번만 사용하면 큰 차이는 아니지만 수동 정렬과 같은 무거운 작업을 수행하는 경우 가장 빠른 것을 선택하는 것이 중요합니다. 그렇지 않으면 가장 읽기 쉽다고 생각하는 것을 선택하는 것이 좋습니다.