파이썬에서 빈 목록 만들기


243

파이썬에서 새로운 빈 목록을 만드는 가장 좋은 방법은 무엇입니까?

l = [] 

또는

l = list()

나는 두 가지 이유 때문에 이것을 묻고 있습니다.

  1. 어느 것이 더 빠른지 기술적 인 이유. (클래스를 만들면 오버 헤드가 발생합니까?)
  2. 코드 가독성-표준 규칙 중 하나입니다.

4
"빠른"? 왜 타임 타임을하지 않았습니까?
S.Lott

답변:


335

어떤 코드가 더 빠른지 테스트하는 방법은 다음과 같습니다.

% python -mtimeit  "l=[]"
10000000 loops, best of 3: 0.0711 usec per loop

% python -mtimeit  "l=list()"
1000000 loops, best of 3: 0.297 usec per loop

그러나 실제로이 초기화는 프로그램의 매우 작은 부분 일 가능성이 높으므로이 문제에 대한 걱정이 잘못 될 수 있습니다.

가독성은 매우 주관적입니다. 나는 선호 []하지만 Alex Martelli와 같이 매우 잘 알려진 사람들 은 발음list() 하기 쉽기 때문에 선호합니다 .


12
와, 프로파일 링 감사합니다. 나는 그것이 어떻게되었는지 항상 알고 싶었다.
user225312

이유는 무엇입니까 list('')주는 []대신 ['']?
Chris_Rands

이것은이 func이 반복 가능한 유형의 목록을 만들기 때문에 둘 이상의 인수를 삽입 할 수 없기 때문입니다. (입력 list('abcd')하고 모든 것을 이해하십시오)
Ivan Lavrenov

133

list()보다 본질적으로 느린 []있기 때문에,

  1. 기호 조회가 있습니다 (목록을 다른 것으로 정의하지 않은 경우 파이썬이 미리 알 수있는 방법이 없습니다!),

  2. 함수 호출이 있습니다.

  3. 그런 다음 반복 가능한 인수가 전달되었는지 확인해야합니다 (따라서 요소로 목록을 만들 수 있음) ps. 우리의 경우에는 아무것도 없지만 "if"체크가 있습니다

대부분의 경우 속도 차이는 실질적인 차이를 만들지 않습니다.


38
+1 : 왜 list()더 느린 지 이해하는 것이 좋습니다 []!
Eric O Lebigot 2018 년

2
list()경우에는 인수가 전혀 없는지 확인해야합니다. "반복 가능 여부 확인"및 "요소로 목록 작성"은 발생하지 않습니다. 인수가있는 경우에만 적용됩니다. C 코드 []가와 동일한 C 코드 를 호출 할 수도 있습니다 list(). 어쨌든 (c)에 관련된 시간은 (a) + (b)와 비교하여 작을 것입니다.
John Machin

1
@ John Machin-혼란을 드려 죄송합니다. (c)의 의미는 논쟁이 있는지 확인해야한다는 것입니다. 나머지는 논쟁이있을 경우 일어날 일에 관한 것이 었습니다. 우리의 경우에는 아무것도 없습니다
Nas Banov

16

사용 []합니다.

  1. 목록 표기법이 단락이기 때문에 더 빠릅니다.
  2. 항목이 있는 목록 만들면 목록 만들지 않고 목록을 만들 때와 동일한 모양을 사용해야합니다. 왜 차이가 있습니까?

3

나는 그것에 대해 실제로 알지 못하지만 경험상 jpcgt가 실제로 옳은 것 같습니다. 다음 예 : 다음 코드를 사용하는 경우

t = [] # implicit instantiation
t = t.append(1)

인터프리터에서 t를 호출하면 목록없이 "t"를 제공하고 다른 것을 추가하면 예를 들어

t = t.append(2)

" 'NoneType'개체에 'append'속성이 없습니다."오류가 발생합니다. 그러나, 내가 목록을 만들면

t = list() # explicit instantiation

그럼 잘 작동합니다.


15
때문이다 t.append(1)수정 t장소에, 그것은 아무것도하지만 반환하지 않습니다 None그리고 당신은이를 할당하는 Nonet . 그래서 t지금 의미 None대신 목록에. 여기서 실수 t=t.append(1)는 그냥 쓰는 대신 쓰는 것입니다 t.append(1). 와 동일한 동작을 알 수 list()있으므로 여기에는 차이가 없습니다.
Darkonaut

1

@Darkonaut 답변 을 강조 표시 하면 더 잘 보일 것입니다.

new_list = []또는 new_list = list()성능이 무시되는 것이 좋지만 결과를 append()반환 None할 수 없습니다 new_list = new_list.append(something.

나는 그런 반환 유형 결정에 매우 당황합니다. 왝.

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