[python] 목록 내에서 항목을 이동 하시겠습니까?

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] │
└──────────┴───────────────────────────┘

몇 번만 사용하면 큰 차이는 아니지만 수동 정렬과 같은 무거운 작업을 수행하는 경우 가장 빠른 것을 선택하는 것이 중요합니다. 그렇지 않으면 가장 읽기 쉽다고 생각하는 것을 선택하는 것이 좋습니다.


답변