[] 및 {} vs list()와 dict() 중 어떤 것이 더 낫습니까?
둘 다 본질적으로 같은 것이라는 것은 이해하지만, 스타일 측면에서 빈 목록이나 받아쓰기를 만드는 데 어떤 것이 더 나은(더 파이썬적인) 것인가요?
속도 면에서 빈 목록/관습서를 놓고 경쟁할 필요가 없습니다.
>>> from timeit import timeit
>>> timeit("[]")
0.040084982867934334
>>> timeit("list()")
0.17704233359267718
>>> timeit("{}")
0.033620194745424214
>>> timeit("dict()")
0.1821558326547077
비어 있지 않은 경우:
>>> timeit("[1,2,3]")
0.24316302770330367
>>> timeit("list((1,2,3))")
0.44744206316727286
>>> timeit("list(foo)", setup="foo=(1,2,3)")
0.446036018543964
>>> timeit("{'a':1, 'b':2, 'c':3}")
0.20868602015059423
>>> timeit("dict(a=1, b=2, c=3)")
0.47635635255323905
>>> timeit("dict(bar)", setup="bar=[('a', 1), ('b', 2), ('c', 3)]")
0.9028228448029267
또한 대괄호 표기법을 사용하면 목록 및 사전 이해를 사용할 수 있으므로 충분히 합리적일 수 있습니다.
내 생각에는[]그리고.{}빈 목록/문서를 만드는 가장 단순하고 읽기 쉬운 방법입니다.
경계하기set()하지만 예를 들어 다음과 같습니다.
this_set = {5}
some_other_set = {}
헷갈릴 수 있습니다.첫 번째는 하나의 요소로 집합을 만들고, 두 번째는 집합이 아닌 빈 딕트를 만듭니다.
딕트 리터럴은 바이트 코드가 짧기 때문에 조금 더 빠를 수 있습니다.
In [1]: import dis
In [2]: a = lambda: {}
In [3]: b = lambda: dict()
In [4]: dis.dis(a)
1 0 BUILD_MAP 0
3 RETURN_VALUE
In [5]: dis.dis(b)
1 0 LOAD_GLOBAL 0 (dict)
3 CALL_FUNCTION 0
6 RETURN_VALUE
동일한 사항이 적용됩니다.list대[]
조심하세요.list()그리고.[]다르게 작동:
>>> def a(p):
... print(id(p))
...
>>> for r in range(3):
... a([])
...
139969725291904
139969725291904
139969725291904
>>> for r in range(3):
... a(list())
...
139969725367296
139969725367552
139969725367616
list()항상 힙에 새 개체를 생성하지만[]메모리 셀을 여러 상황에서 재사용할 수 있습니다.
IMHO, 사용list()그리고.dict()Python을 C처럼 만듭니다.에휴.
[]와 list()의 차이의 경우, 다른 사람이 지적하는 것을 본 적이 없는 함정이 있습니다.사전을 목록의 구성원으로 사용하면 두 가지 결과가 완전히 달라집니다.
In [1]: foo_dict = {"1":"foo", "2":"bar"}
In [2]: [foo_dict]
Out [2]: [{'1': 'foo', '2': 'bar'}]
In [3]: list(foo_dict)
Out [3]: ['1', '2']
사이의 차이list()그리고.[]아무도 언급하지 않은, 그것은.list()예를 들어 튜플을 목록으로 변환합니다.그리고.[]해당 튜플을 목록에 넣습니다.
a_tuple = (1, 2, 3, 4)
test_list = list(a_tuple) # returns [1, 2, 3, 4]
test_brackets = [a_tuple] # returns [(1, 2, 3, 4)]
list()와 [] 사이에는 이러한 차이가 없지만 반복기와 함께 사용하면 다음과 같은 이점이 있습니다.
nums = [1,2,3,4,5,6,7,8]
입력: 인쇄([iter(nums))
Out: [<list_iterator 객체 at 0x03E4CDD8>]
입력: 인쇄(목록(표시자(숫자))
아웃: [1, 2, 3, 4, 5, 6, 7, 8]
아래 예시와 같이 []와 list 사이에 동작에 한 가지 차이가 있습니다. 만약 우리가 번호 목록을 반환받고 싶다면, 우리는 list를 사용해야 합니다. 그렇지 않으면 우리는 지도 객체를 얻습니다!어떻게 설명해야 할지 모르겠어요.
sth = [(1,2), (3,4),(5,6)]
sth2 = map(lambda x: x[1], sth)
print(sth2) # print returns object <map object at 0x000001AB34C1D9B0>
sth2 = [map(lambda x: x[1], sth)]
print(sth2) # print returns object <map object at 0x000001AB34C1D9B0>
type(sth2) # list
type(sth2[0]) # map
sth2 = list(map(lambda x: x[1], sth))
print(sth2) #[2, 4, 6]
type(sth2) # list
type(sth2[0]) # int
a 사이의 다른 차이점 중 하나list()그리고.[]
list_1 = ["Hello World"] # is a list of the word "Hello World"
list_2 = list("Hello World") # is a list of letters 'H', 'e', 'l'...
기억해야 할 것이 있습니다...
첨자 중 . 를 들어, " 상괄호쌍목첨중나다하타니냅나자를인덱스또자는개은체록▁a,다▁denotes▁pair▁box,니나▁one▁subscript"입니다.my_List[x].
물결 괄호 쌍은 사전 개체를 나타냅니다.
a_list = ['on', 'off', 1, 2]
a_dict = { on: 1, off: 2 }
언급URL : https://stackoverflow.com/questions/5790860/and-vs-list-and-dict-which-is-better
'codememo' 카테고리의 다른 글
| 파일 트리 다이어그램을 그리는 데 사용할 도구 (0) | 2023.05.23 |
|---|---|
| Mongoose에서 캐스케이드 스타일 삭제 (0) | 2023.05.18 |
| 옵션 매개 변수를 오버로드로 대체하는 것이 획기적인 변화입니까? (0) | 2023.05.18 |
| Mongoose 스키마에서 다른 스키마를 참조하는 방법은 무엇입니까? (0) | 2023.05.18 |
| Bash에서 $PATH 변수에서 경로를 제거하는 가장 우아한 방법은 무엇입니까? (0) | 2023.05.18 |