len() 함수의 비용
Python 내장 기능의 비용은 얼마입니까?(리스트/태플/스트링/사료)
설명한 모든 유형의 O(1)(원소의 실제 길이에 의존하지 않는 일정한 시간 - 매우 빠름)입니다.set
기타 등array.array
.
부르기len()
이러한 데이터 타입은 파이썬 언어의 공식 및 가장 일반적인 구현인 CPython의 O(1)입니다.다음은 CPython의 다양한 함수의 알고리즘 복잡성을 제공하는 표 링크입니다.
그 모든 물체들은 그들 자신의 길이를 추적한다.길이를 추출하는 데 걸리는 시간은 짧으며(빅 O 표기법으로는 O(1)), 대부분 [C 항이 아닌 Python 용어로 작성된 대략적인 설명]으로 구성됩니다.사전에서 "len"을 검색하여 오브젝트의 "len"을 검색하는 built_in len 함수에 디스패치합니다.__len__
...라고 부르는 방법만 있으면 된다.return self.length
아래 측정은 다음과 같은 증거를 제공합니다.len()
자주 사용되는 데이터 구조의 경우 O(1)입니다.
에 관한 주의사항timeit
: 의 경우-s
플래그가 사용되며 2개의 문자열이 에 전달됩니다.timeit
첫 번째 문자열은 1회만 실행되며 타임은 설정되지 않습니다.
리스트:
$ python -m timeit -s "l = range(10);" "len(l)"
10000000 loops, best of 3: 0.0677 usec per loop
$ python -m timeit -s "l = range(1000000);" "len(l)"
10000000 loops, best of 3: 0.0688 usec per loop
태플:
$ python -m timeit -s "t = (1,)*10;" "len(t)"
10000000 loops, best of 3: 0.0712 usec per loop
$ python -m timeit -s "t = (1,)*1000000;" "len(t)"
10000000 loops, best of 3: 0.0699 usec per loop
문자열:
$ python -m timeit -s "s = '1'*10;" "len(s)"
10000000 loops, best of 3: 0.0713 usec per loop
$ python -m timeit -s "s = '1'*1000000;" "len(s)"
10000000 loops, best of 3: 0.0686 usec per loop
사전(2.7 이상에서 사전 이해 가능):
$ python -mtimeit -s"d = {i:j for i,j in enumerate(range(10))};" "len(d)"
10000000 loops, best of 3: 0.0711 usec per loop
$ python -mtimeit -s"d = {i:j for i,j in enumerate(range(1000000))};" "len(d)"
10000000 loops, best of 3: 0.0727 usec per loop
어레이:
$ python -mtimeit -s"import array;a=array.array('i',range(10));" "len(a)"
10000000 loops, best of 3: 0.0682 usec per loop
$ python -mtimeit -s"import array;a=array.array('i',range(1000000));" "len(a)"
10000000 loops, best of 3: 0.0753 usec per loop
Set(2.7+로 설정 가능):
$ python -mtimeit -s"s = {i for i in range(10)};" "len(s)"
10000000 loops, best of 3: 0.0754 usec per loop
$ python -mtimeit -s"s = {i for i in range(1000000)};" "len(s)"
10000000 loops, best of 3: 0.0713 usec per loop
디큐:
$ python -mtimeit -s"from collections import deque;d=deque(range(10));" "len(d)"
100000000 loops, best of 3: 0.0163 usec per loop
$ python -mtimeit -s"from collections import deque;d=deque(range(1000000));" "len(d)"
100000000 loops, best of 3: 0.0163 usec per loop
len은 O(1)입니다.이는 RAM에는 목록이 테이블(연속 주소 시리즈)로 저장되기 때문입니다.테이블이 언제 정지하는지 알기 위해서는 길이와 시작점 두 가지가 필요합니다.그렇기 때문에 len()은 O(1)이고 컴퓨터는 값을 저장하기 때문에 검색만 하면 됩니다.
언급URL : https://stackoverflow.com/questions/1115313/cost-of-len-function
'source' 카테고리의 다른 글
MySQL에서 열의 데이터 유형을 변경하려면 어떻게 해야 합니까? (0) | 2022.10.20 |
---|---|
Larabel에서 신규 사용자 등록을 해제하는 방법 (0) | 2022.10.20 |
'LIKE(%this%)' 또는 '%this%' 및 'something=something'이 작동하지 않습니다. (0) | 2022.10.20 |
Python에서 커스텀 메시지와 동일한 예외를 발생시키는 방법은 무엇입니까? (0) | 2022.10.20 |
Java 속성 파일에 여러 줄의 코멘트를 추가할 수 있습니까? (0) | 2022.10.19 |