Python에서 항목을 목록의 명확한 색인으로 이동하려면 어떻게해야합니까?
답변
insert
목록 의 방법을 사용하십시오 .
l = list(...)
l.insert(index, item)
또는 슬라이스 표기법을 사용할 수 있습니다.
l[index:index] = [item]
목록에 이미있는 항목을 지정된 위치로 이동하려면 항목을 삭제하고 새 위치에 삽입해야합니다.
l.insert(newindex, l.pop(oldindex))
답변
항목을 끝까지 만 이동하는 약간 더 짧은 솔루션은 다음과 같습니다.
l += [l.pop(0)]
예를 들면 :
>>> l = [1,2,3,4,5]
>>> l += [l.pop(0)]
>>> l
[2, 3, 4, 5, 1]
답변
항목의 위치를 모르는 경우 먼저 색인을 찾아야 할 수 있습니다.
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
답변
해결책은 매우 간단하지만 원래 위치의 색인과 새 위치의 색인을 알아야합니다.
list1[index1],list1[index2]=list1[index2],list1[index1]
답변
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] │ └──────────┴───────────────────────────┘
몇 번만 사용하면 큰 차이는 아니지만 수동 정렬과 같은 무거운 작업을 수행하는 경우 가장 빠른 것을 선택하는 것이 중요합니다. 그렇지 않으면 가장 읽기 쉽다고 생각하는 것을 선택하는 것이 좋습니다.