1. dict
Python에는 내장 사전이 있습니다. dict가 지원됩니다. dict의 전체 이름은 dictionary이며 다른 언어에서는 map이라고도합니다. 키-값 저장소를 사용하며 검색 속도가 매우 빠릅니다.
예를 들어 반 친구의 이름을 기반으로 해당 성적을 찾으려고한다고 가정합니다. 목록을 사용하여 구현하는 경우 두 개의 목록이 필요합니다.
names = ['Michael', 'Bob', 'Tracy']
scores = [95, 75, 85]
이름이 주어지면 해당 점수를 찾으려면 먼저 이름에서 해당 위치를 찾은 다음 점수에서 해당 점수를 검색해야합니다. 목록이 길수록 시간이 오래 걸립니다.
dict로 구현하면 "name"- "score"비교표 만 필요하며, 이름을 기준으로 결과를 직접 검색하며, 테이블이 아무리 커도 검색 속도가 느려지지 않습니다. 다음과 같이 Python으로 사전을 작성하십시오.
>>> d = {
'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
dict 검색이 왜 그렇게 빠른가요? dict의 구현 원리는 사전을 찾는 것과 동일하기 때문입니다. 사전에 한자가 10,000 자라고 가정하면 특정 단어를 찾아보아야합니다. 한 가지 방법은 원하는 단어를 찾을 때까지 첫 페이지에서 사전을 되 돌리는 것입니다.이 방법은 목록에서 요소를 찾는 것입니다. 목록이 클수록 검색 속도가 느려집니다.
두 번째 방법은 먼저 사전의 색인 테이블 (예 : 기본 테이블)에서 단어에 해당하는 페이지 번호를 조회 한 다음 페이지로 직접 이동하여 단어를 찾는 것입니다. 어떤 단어를 검색하든 검색 속도는 매우 빠르며 사전의 크기가 커도 느려지지 않습니다.
dict는 두 번째 구현 방법입니다 .'Michael '과 같은 이름이 주어지면 dict는 숫자 95가 저장된 메모리 주소 인 내부적으로 Michael의 해당 스토리지 점수의 "페이지 번호"를 직접 계산하여 직접 가져올 수 있습니다. 그래서 속도는 매우 빠릅니다.
짐작할 수 있듯이 이런 종류의 키-값 저장 방법은 키를 넣었을 때 키에 따라 값의 저장 위치를 계산해야하므로, 가져 왔을 때 키에 따라 값을 직접 얻을 수 있습니다.
초기화 중에 지정하는 것 외에도 데이터를 dict에 넣는 방법을 키에 넣을 수도 있습니다.
>>> d['Adam'] = 67
>>> d['Adam']
67
키는 하나의 값에만 해당 할 수 있으므로 키를 값에 여러 번 입력하면 다음 값이 이전 값을 지 웁니다.
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> d['Jack'] = 90
>>> d['Jack']
90
>>> d['Jack'] = 88
>>> d['Jack']
88
키가 존재하지 않으면 dic는 오류를보고합니다. 키가 존재하지 않는다는 오류를 피하기 위해 두 가지 방법이 있습니다. 하나는 in으로 키가 있는지 여부를 판단하는 것입니다.
>>> 'Thomas' in d
False
두 번째는 dict에서 제공하는 get () 메서드를 사용하는 것입니다. 키가 존재하지 않으면 None을 반환 할 수 있습니다 (참고 : Python 대화 형 환경은 None이 반환 될 때 결과를 표시하지 않습니다). 또는 지정한 값 :
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
키를 삭제하려면 pop (key) 메서드를 사용하면 해당 값이 dict에서도 삭제됩니다.
>>> d.pop('Bob')
75
>>> d
{
'Michael': 95, 'Tracy': 85}
dict의 내부 저장 순서는 키가 배치되는 순서와 관련이 없다는 점에 유의하는 것이 중요합니다.
list와 비교할 때 dict에는 다음과 같은 특성이 있습니다.
- 검색 및 삽입 속도는 매우 빠르며 키가 증가해도 느려지지 않습니다.
- 많은 메모리, 많은 메모리 낭비가 필요합니다.
목록의 반대 :
- 요소를 찾고 삽입하는 시간은 요소의 증가에 따라 증가합니다.
- 적은 공간을 차지하고 메모리를 거의 낭비하지 않습니다.
따라서 dict는 공간을 시간과 교환하는 방법입니다.
dict는 고속 검색이 필요한 여러 곳에서 사용할 수 있습니다. Python 코드의 거의 모든 곳에서 사용할 수 있습니다. dict의 올바른 사용은 매우 중요합니다. dict의 키는 변경 불가능한 객체 여야한다는 점을 가장 먼저 명심해야합니다.
이는 dict가 키에 따라 값의 저장 위치를 계산하기 때문이며, 매번 같은 키를 계산 한 결과가 다를 경우 dict가 완전히 혼란스러워집니다. 키로 위치를 계산하는이 알고리즘을 해시 알고리즘 (Hash)이라고합니다.
해시의 정확성을 보장하기 위해 키 개체를 변경할 수 없습니다. Python에서 문자열, 정수 등은 불변이므로 안전하게 키로 사용할 수 있습니다. 목록은 가변적이며 키로 사용할 수 없습니다.
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> key = [1, 2, 3]
>>> d[key] = 'a list'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
2. 설정
Set은 dict와 유사하며 키 집합이기도하지만 값을 저장하지 않습니다. 키를 반복 할 수 없기 때문에 세트에 중복 키가 없습니다.
집합을 만들려면 목록을 입력 집합으로 제공해야합니다.
>>> s = set([1, 2, 3])
>>> s
{
1, 2, 3}
들어오는 매개 변수 [1, 2, 3]은 목록이고 표시된 {1, 2, 3}는 세트에 1, 2, 3의 3 개 요소가 있음을 알려주며 표시 순서는 세트가 주문됩니다. .
반복되는 요소는 세트에서 자동으로 필터링됩니다.
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{
1, 2, 3}
add (key) 메서드를 통해 집합에 요소를 추가 할 수 있으며 반복적으로 추가 할 수 있지만 효과는 없습니다.
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> s.add(4)
>>> s
{
1, 2, 3, 4}
>>> s.add(4)
>>> s
{
1, 2, 3, 4}
remove (key) 메서드를 통해 요소를 삭제할 수 있습니다.
>>> s.remove(4)
>>> s
{
1, 2, 3}
집합은 수학적 의미에서 무질서하고 반복되지 않는 요소의 집합으로 간주 될 수 있습니다. 따라서 두 집합은 수학적 의미에서 교차 및 합집합과 같은 연산을 수행 할 수 있습니다.
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{
2, 3}
>>> s1 | s2
{
1, 2, 3, 4}
set과 dict의 유일한 차이점은 해당 값이 저장되지 않는다는 것입니다. 그러나 set의 원리는 dict의 원리와 동일하므로 변수 객체를 같은 방식으로 배치 할 수 없습니다. 두 변수 객체가 동일한 지 여부를 판단 할 수 없기 때문에 세트를 보장 할 수 없습니다. 내부에 "중복 요소가 없습니다".
불변 객체에 대해 다시 이야기하십시오.
위에서 언급했듯이 str은 변경 불가능한 객체이고 list는 변경 가능한 객체입니다.
목록과 같은 변경 가능한 객체의 경우 목록에서 작업하면 목록의 내용이 다음과 같이 변경됩니다.
>>> a = ['c', 'b', 'a']
>>> a.sort()
>>> a
['a', 'b', 'c']
그리고 str과 같은 불변 객체의 경우 str에 대한 작업을 수행하십시오.
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a
'abc'
문자열에 replace () 메서드가 있지만 'Abc'를 변경하지만 변수 a는 여전히 끝에 'abc'입니다. 어떻게 이해해야합니까?
먼저 코드를 다음과 같이 변경해 보겠습니다.
>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'
a는 변수이고 'abc'는 문자열 객체라는 것을 항상 명심하십시오! 때때로 우리는 객체 a의 내용이 'abc'라고 말하지만 실제로는 그 자체가 변수이고 그것이 가리키는 객체의 내용이 'abc'임을 의미합니다. 따라서 불변 객체에 대해서는 객체를 호출합니다. 자체 메서드는 개체 자체의 내용을 변경하지 않습니다. 대신 이러한 메서드는 새 객체를 생성하고 반환하므로 불변 객체 자체가 항상 불변임을 보장합니다.