파이썬에서 새로운 빈 목록을 만드는 가장 좋은 방법은 무엇입니까?
l = []
또는
l = list()
나는 두 가지 이유 때문에 이것을 묻고 있습니다.
- 어느 것이 더 빠른지 기술적 인 이유. (클래스를 만들면 오버 헤드가 발생합니까?)
- 코드 가독성-표준 규칙 중 하나입니다.
답변
어떤 코드가 더 빠른지 테스트하는 방법은 다음과 같습니다.
% 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()
하기 쉽기 때문에 선호합니다 .
답변
list()
보다 본질적으로 느린 []
있기 때문에,
-
기호 조회가 있습니다 (목록을 다른 것으로 정의하지 않은 경우 파이썬이 미리 알 수있는 방법이 없습니다!),
-
함수 호출이 있습니다.
-
그런 다음 반복 가능한 인수가 전달되었는지 확인해야합니다 (따라서 요소로 목록을 만들 수 있음) ps. 우리의 경우에는 아무것도 없지만 “if”체크가 있습니다
대부분의 경우 속도 차이는 실질적인 차이를 만들지 않습니다.
답변
사용 []
합니다.
- 목록 표기법이 단락이기 때문에 더 빠릅니다.
- 항목이 있는 목록 을 만들면 목록 을 만들지 않고 목록을 만들 때와 동일한 모양을 사용해야합니다. 왜 차이가 있습니까?
답변
나는 그것에 대해 실제로 알지 못하지만 경험상 jpcgt가 실제로 옳은 것 같습니다. 다음 예 : 다음 코드를 사용하는 경우
t = [] # implicit instantiation
t = t.append(1)
인터프리터에서 t를 호출하면 목록없이 “t”를 제공하고 다른 것을 추가하면 예를 들어
t = t.append(2)
” ‘NoneType’개체에 ‘append’속성이 없습니다.”오류가 발생합니다. 그러나, 내가 목록을 만들면
t = list() # explicit instantiation
그럼 잘 작동합니다.
답변
@Darkonaut 답변 을 강조 표시 하면 더 잘 보일 것입니다.
new_list = []
또는 new_list = list()
성능이 무시되는 것이 좋지만 결과를 append()
반환 None
할 수 없습니다 new_list = new_list.append(something
.
나는 그런 반환 유형 결정에 매우 당황합니다. 왝.