사전, 목록 또는 세트는 언제 사용해야합니까?
각 데이터 유형에 더 적합한 시나리오가 있습니까?
답변
A는 list
주문을 유지 dict
하고 set
하지 말아야 할 것 : 주문에 관심이있을 때는 반드시 사용해야합니다 list
(컨테이너 선택이이 세 가지로 제한되는 경우 물론 ;-).
dict
각 키 값을 가진 동료, 동안 list
과 set
분명히 매우 다른 사용 사례 : 단지 값이 포함되어 있습니다.
set
해시 가능 항목이 필요 list
하지 않습니다. 해시 가능 항목이 없으면 사용할 수 없으며 set
대신 사용해야 list
합니다.
set
중복을 금지 list
하지 않으며 중요한 차이점도 아닙니다. 항목에 대해 서로 다른 계산에 중복 매핑 (A “MULTISET는”한 번 이상,에서 찾을 수 있습니다 선물합니다 collections.Counter
– 당신이 하나를 만들 수있다 dict
, 만약 당신이 수있는 몇 가지 이상한 이유는 아니다 수입 collections
에서, 또는 사전 2.7 collections.defaultdict(int)
항목을 키로 사용하고 관련 값을 개수로 사용하여 Python ).
set
(또는 dict
키의 경우) 값의 멤버쉽을 확인하는 것은 엄청나게 빠르며 (일정하고 짧은 시간을 사용함), 목록에서는 평균 및 최악의 경우 목록의 길이에 비례하여 시간이 걸립니다. 당신이 해쉬 항목이 경우에 따라서, 주문 또는 중복에 대한 어느 쪽이든 상관, 그리고 빠른 회원 검사를하지 않는 set
것보다 낫다 list
.
답변
- 주문한 일련의 품목 만 필요합니까? 목록으로 이동하십시오.
- 이미 특정 가치를 가지고 있는지 , 주문하지 않고 (그리고 중복을 저장할 필요가 없는지) 알아야합니까? 세트를 사용하십시오.
- 값을 키와 연결해야하므로 나중에 키별로 효율적으로 찾을 수 있습니까? 사전을 사용하십시오.
답변
정렬되지 않은 고유 요소 컬렉션을 원할 경우을 사용하십시오 set
. (예를 들어, 문서에 사용 된 모든 단어 세트를 원할 때).
변경 불가능한 순서로 정렬 된 요소 목록을 수집하려면을 사용하십시오 tuple
. (예를 들어, 세트에서 요소로 사용하려는 (name, phone_number) 쌍을 원할 경우 세트가 요소를 변경할 수 없으므로 목록이 아닌 튜플이 필요합니다).
가변 순서로 정렬 된 요소 목록을 수집하려면을 사용하십시오 list
. (예 : 목록에 새 전화 번호를 추가하려는 경우 : [number1, number2, …]).
키에서 값으로 매핑하려면을 사용하십시오 dict
. (예를 들어, 전화 번호에 이름을 매핑하는 전화 번호부를 원할 경우 🙂 {'John Smith' : '555-1212'}
. dict의 키는 순서가 없습니다. dict (전화 번호부)을 반복하면 키 (이름)가 임의의 순서로 표시 될 수 있습니다.
답변
-
값에 맵핑되는 고유 키 세트가있는 경우 사전을 사용하십시오.
-
주문한 항목 모음이있는 경우 목록을 사용하십시오.
-
세트를 사용하여 정렬되지 않은 항목 세트를 저장하십시오.
답변
간단히 말해서 다음을 사용하십시오.
list
-주문한 순서의 항목이 필요한 경우.
dict
-값을 키와 관련시켜야하는 경우
set
-고유 한 요소를 유지해야하는 경우
상해
명부
목록은 일반적으로 동종 항목의 컬렉션을 저장하는 데 사용되는 변경 가능한 시퀀스입니다.
리스트는 모든 공통 시퀀스 연산을 구현합니다.
x in l
과x not in l
l[i]
,l[i:j]
,l[i:j:k]
len(l)
,min(l)
,max(l)
l.count(x)
l.index(x[, i[, j]])
-의 첫번째 발생의 색인x
에서l
(또는 그 이후i
와 이전j
굴절률들)
또한리스트는 변경 가능한 모든 시퀀스 작업을 구현합니다.
l[i] = x
– 항목i
의l
로 대체x
l[i:j] = t
– 조각l
에서i
로는j
반복자의 내용으로 대체t
del l[i:j]
-와 동일l[i:j] = []
l[i:j:k] = t
-의 요소는l[i:j:k]
다음 의 요소로 대체t
del l[i:j:k]
–s[i:j:k]
목록에서 요소를 제거합니다l.append(x)
–x
시퀀스의 끝에 추가l.clear()
-에서 모든 항목을 제거합니다l
(del과 동일l[:]
).l.copy()
-의 얕은 사본을 만듭니다l
(와 동일l[:]
)l.extend(t)
또는l += t
–l
내용으로 확장t
l *= n
– 업데이트l
에 그 내용을 반복n
번l.insert(i, x)
– 삽입x
에l
의해 지정된 인덱스에서i
l.pop([i])
-에서 항목을 검색하고i
제거합니다.l
l.remove(x)
-x와 같은l
곳 에서 첫 번째 항목을 제거하십시오.l[i]
l.reverse()
–l
제자리에 있는 항목을 뒤집 습니다
목록이 방법을 이용하여 적층으로 사용될 수 append
와 pop
.
사전
사전은 해시 가능 값을 임의의 객체에 매핑합니다. 사전은 변경 가능한 객체입니다. 사전의 주요 작업은 일부 키와 함께 값을 저장하고 해당 키에서 주어진 값을 추출하는 것입니다.
사전에서는 해시 가능하지 않은 키 값, 즉 목록, 사전 또는 기타 변경 가능한 유형을 포함하는 값으로 사용할 수 없습니다.
세트
세트는 고유 한 해시 가능 객체의 정렬되지 않은 컬렉션입니다. 집합은 일반적으로 멤버쉽 테스트, 시퀀스에서 중복 제거, 교차, 합집합, 차이 및 대칭 차이와 같은 수학 연산 계산을 포함하는 데 사용됩니다.
답변
이것은 set
s를 다루지 않지만 dict
s와 list
s에 대한 좋은 설명입니다 .
목록은 그들이 보이는 것-값의 목록입니다. 이들 각각은 0부터 시작하여 번호가 매겨집니다. 첫 번째는 0, 두 번째 1, 세 번째 2 등입니다. 목록에서 값을 제거하고 끝에 새 값을 추가 할 수 있습니다. 예 : 많은 고양이 이름.
사전은 이름에서 제안하는 사전과 유사합니다. 사전에는 단어의 ‘인덱스’가 있으며 각 단어마다 정의가 있습니다. 파이썬에서는 단어를 ‘키’라고하고 정의를 ‘값’이라고합니다. 사전의 값은 번호가 매겨져 있지 않으며 이름에서 제안하는 것과 비슷한 용기 값입니다. 사전에는 단어의 ‘인덱스’가 있으며 각 단어마다 정의가 있습니다. 사전의 값은 번호가 매겨져 있지 않으며 특정한 순서가 아니거나 키도 마찬가지입니다. 사전의 값을 추가, 제거 및 수정할 수 있습니다. 예 : 전화 번호부.
답변
C ++의 경우 항상이 흐름도를 염두에 두었습니다. 어떤 시나리오에서 특정 STL 컨테이너를 사용합니까? 그래서 Python3에서도 비슷한 것을 사용할 수 있는지 궁금했지만 운이 없었습니다.
파이썬에서 명심해야 할 것은 : C ++에 대한 단일 파이썬 표준은 없습니다. 따라서 다른 파이썬 인터프리터 (예 : CPython, PyPy)에는 큰 차이가있을 수 있습니다. 다음 순서도는 CPython에 대한 것입니다.
또한 내가 그림에 다음 데이터 구조를 통합 할 수있는 좋은 방법을 찾을 수 없습니다 : bytes
, byte arrays
, tuples
, named_tuples
, ChainMap
, Counter
,와 arrays
.
OrderedDict
과deque
를 통해 사용할 수있는collections
모듈.heapq
heapq
모듈 에서 사용 가능LifoQueue
,Queue
및 동시 (스레드) 액세스 용으로 설계된 모듈을PriorityQueue
통해 사용할 수queue
있습니다. (multiprocessing.Queue
사용 가능한 것도 있지만 차이점을queue.Queue
모르지만 프로세스에서 동시 액세스가 필요할 때 사용해야한다고 가정합니다.)dict
,set
,frozen_set
, 그리고list
물론 내장되어
이 답변을 개선하고 모든 측면에서 더 나은 다이어그램을 제공 할 수 있다면 누구나 감사 할 것입니다. 부담없이 환영하십시오.
추신 : 다이어그램은 yed로 만들어졌습니다. graphml 파일 은 여기