2013-07-28 2 views
222

나는 정수와리스트를 가지고있다. 변수로 시작하여 목록으로 끝나는 새 목록을 만들고 싶습니다. 쓰기 a + list 오류가 발생했습니다. 컴파일러는 a을 정수로 처리하므로 추가하거나 확장 할 수 없습니다. 어떻게 하시겠습니까?파이썬에서리스트의 처음에 정수를 붙인다.

답변

308
>>> a = 5 
>>> li = [1, 2, 3] 
>>> [a] + li # Don't use 'list' as variable name. 
[5, 1, 2, 3] 
+199

난 그냥 몇 가지 벤치마킹을했다. 'li.insert (0, a)'는'li = [a] + li'보다 약 5 배 빠릅니다. 이 일을 여러 번한다면이 점을 명심하십시오. –

+47

@MarcelPfeiffer'li.insert (0, a)'는'li'을 변형시키고 있습니다. 'li = [a] + li'는 모든 값을 새 인스턴스로 만듭니다. 다른 것들이 목록 인스턴스에 대한 참조를 가지고 있다면 이것은 중요한 차이점입니다. – unholysampler

+1

파이썬이 list.push_front (item) 함수를 추가하는 것이 좋다. 이것은 분명하고 오류가 발생하기 쉽지 않습니다. –

330
>>>var=7 
>>>array = [1,2,3,4,5,6] 
>>>array.insert(0,var) 
>>>array 
[7, 1, 2, 3, 4, 5, 6] 

그것이 작동하는 방법 :

array.insert(index, value)

가 주어진 위치에 항목을 삽입합니다. 첫 번째 인수는 요소 앞에 삽입 할 요소의 인덱스이므로 array.insert(0, x)은 목록의 앞에 삽입하고 array.insert(len(array), x)array.append(x)과 같습니다. 음수 값은 배열 끝에 상대적으로 처리됩니다.

+5

가장 효율적인 방법. [x] + [y]보다 빠릅니다. 여기 솔루션을 참조하십시오 : http://stackoverflow.com/questions/8537916/whats-the-idiomatic-syntax-for-prepending-to-a-short-python-list –

+0

질문에 명확하게 _new_ 목록을 만들어야한다고 나와 있습니다. 그래서 이것은 빠를 수 있습니다 -하지만 잘못되었습니다. ;-) – BlackJack

+0

@BlackJack 질문은 목록의 처음에 정수를 추가하는 방법에 관한 것입니다. 그가 묘사하는 것은 무엇이든 따라야 할 올바른 것이 아닙니다. 그렇다면 왜 그가 잘못된 길을 택하도록 안내합니까? 그는 더 나은 일이있을 때 자신의 요구에 따라 할 수 있습니다. – Nullify

29

같은 일을하는 또 다른 방법, 당신은 특히 루프에서, 종종 그 작업을 수행하려는 경우, 목록이 잘못된 데이터 구조 것을

list[0:0] = [a] 
+16

첫 번째 0은 필요하지 않습니다. 콜론은 이미 시작하기 전에 - my_list [: 0] = [a]라고 말합니다. –

+0

우아한 솔루션! – Shejo284

47

참고.

목록은 앞면이 수정되어 있지 않으므로 somelist.insert(0, something)O(n) operation입니다.

somelist.pop(0)del somelist[0]도 O (n) 연산입니다.

사용할 올바른 데이터 구조는 collections 모듈의 deque입니다. deques는 목록의 인터페이스와 유사하지만 양쪽 끝점에서 수정되도록 최적화 된 인터페이스를 노출합니다. 그들 앞에 appendleft 삽입 방법이 있습니다.

데모 :

In [1]: lst = [0]*1000 
In [2]: timeit -n1000 lst.insert(0, 1) 
1000 loops, best of 3: 794 ns per loop 
In [3]: from collections import deque 
In [4]: deq = deque([0]*1000) 
In [5]: timeit -n1000 deq.appendleft(1) 
1000 loops, best of 3: 73 ns per loop 
관련 문제