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


답변:


160

insert목록 의 방법을 사용하십시오 .

l = list(...)
l.insert(index, item)

또는 슬라이스 표기법을 사용할 수 있습니다.

l[index:index] = [item]

목록에 이미있는 항목을 지정된 위치로 이동하려면 항목을 삭제하고 새 위치에 삽입해야합니다.

l.insert(newindex, l.pop(oldindex))

22
insert / pop 메소드를 사용하여 이미 목록에있는 항목을 이동하면 목록의 앞이나 뒤로 이동하는지 여부에 따라 다른 동작이 수행된다는 점을 명심하십시오. 선택한 개체 앞에 삽입하는 왼쪽으로 이동합니다. 선택한 항목 뒤에 삽입하는 뒤로 이동합니다. 목록 끝으로 이동하는지 확인하십시오 (색인 오류).
MKaras 2012

여러 요소를 이동하는 방법은 무엇입니까? 목록 a = [1,2,3,4,5,6,7,8,9]가 주어지면 [1,2, [3,4,5], 6,7,8,9로 변환하는 방법 ]? 이것은 한 단계로 또는 목록 이해로 수행 될 수 있습니까?
g33kz0r 2013

@MKaras 나는 이것을 Python 3.5로 테스트했으며 last index + 1오류없이 삽입 할 수 있습니다. 이 경우 요소는 목록에 추가됩니다.
user2061057 nov.

@ user2061057이 맞습니다 :) 큰 인덱스라도 끝에 항목이 삽입됩니다. a.insert(99999, 1) In [14]: a Out[14]: [...., 1]
리 penkman

1
인덱스 -1을 사용하여 끝에 항목을 삽입하려는 사람들은 대신 len (l)을 사용해야합니다.
nda

31

항목을 끝까지 만 이동하는 약간 더 짧은 솔루션은 다음과 같습니다.

l += [l.pop(0)]

예를 들면 :

>>> l = [1,2,3,4,5]
>>> l += [l.pop(0)]
>>> l
[2, 3, 4, 5, 1]

13
당신은뿐만 아니라 사용할 수 있습니다 l.append(l.pop(0)). 약간 더 길지만 훨씬 더 읽기 쉽습니다.
coredumperror

대신 처음으로 이동하려면 어떻게해야합니까?

19

항목의 위치를 ​​모르는 경우 먼저 색인을 찾아야 할 수 있습니다.

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

6
나는 당신의 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또는 뭔가 그래서 그 작업이 자동으로 실패 할 수 있음을 이해했다.
flutefreak7 2018

3

해결책은 매우 간단하지만 원래 위치의 색인과 새 위치의 색인을 알아야합니다.

list1[index1],list1[index2]=list1[index2],list1[index1]

6
이것은 이동이 아니라 스왑입니다.
juzzlin

0

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.