[Python 연구 노트] 09 위안 조상, 사전, 공통 작업 및 사전 기본 원칙 설정

스스로 파이썬을 배우기위한이 노트 시리즈, 오류가 있으면 수정 해주세요.

원조 tuple

목록은 가변 시퀀스이며 목록의 요소는 고대부터 임의로 사용할 수 있습니다. 요소는 불변의 시퀀스에 속하며 원래 조상의 요소를 수정할 수 없습니다. 따라서 원래 조상은 추가와 같은 관련 방법이 없습니다. 요소, 요소 수정 및 요소 삭제.

Yuanzu는 다음 작업을 지원합니다.

  1. 인덱스 액세스
  2. 슬라이스 작업
  3. 연결 작업
  4. 회원 운영
  5. 비교 작업
  6. 개수 : 원래 조상의 길이 len () 최대 값 max () 최소값 min () sum sum ()

Yuanzu의 창조

  1. ()를 통해 조상 생성, 괄호 생략 가능

    a = (10,20,30) 또는 a = 10,20,30

    조상에 하나의 요소 만있는 경우 인터프리터는 (1)을 정수 1 (1,)을 조상으로 해석하므로 그 뒤에 쉼표가 와야합니다.

    a = (1,)
    type(a)
    
  2. tuple ()에 의해 생성됨

    튜플 (반복 가능한 객체)

    a = tuple()
    b = tuple("a,b,c")
    c = tuple([2,3,4])
    d = tuple(range(3))
    

    요약 : tuple ()은 프리미티브를 생성하기 위해 목록, 문자열, 기타 시퀀스 유형 및 반복자를 수신 할 수 있습니다.

    list ()는 프리미티브, 문자열, 기타 시퀀스 유형, 반복자 등을 수신하여 목록을 생성 할 수 있습니다.

요소 액세스 및 조상의 계산

  1. 조상의 요소는 수정할 수 없습니다.

    a = (10,20,30,40)
    a[3] = 15 #报错 TypeError
    
  2. 상위의 요소 액세스는 목록의 액세스와 동일하지만 반환 된 객체는 여전히 상위 객체입니다.

    a = (10,20,30)
    a[1]
    a[0:2]
    
  3. list list.sorted ()의 정렬 방법은 원본 목록 객체를 수정하는 것이지만 원본 조상에는이 메서드가 없습니다. 원본 조상을 정렬하려면 내장 함수 sorted (tupleObj) 만 사용할 수 있습니다. ) 및 새 목록 개체 생성

지퍼

zip (List 1, List 2 ...)은 여러 목록의 해당 위치에있는 요소를 기본 조상으로 결합하고이 zip 객체를 반환합니다.

a = [10,20,30]
b = [40,50,60]
c = [70,80,90]
d = zip(a,b,c)
list(d)#[(10,40,70),(20,50,80),(30,60,90)]

생성기 연역적 생성

공식적인 관점에서 생성자 이해는 생성자 이해가 괄호를 사용하고 목록 이해가 목록 객체를 직접 생성한다는 점을 제외하면 목록 이해와 유사합니다. 생성자 이해는 목록이나 원시 조상이 아니라 생성자를 생성합니다. 개체.

생성기 객체를 사용하여 목록 또는 원시 조상으로 변환하거나 생성기 객체의 __next__()메서드를 사용하여 순회하거나 반복기 객체로 직접 사용할 수 있습니다. 방법에 관계없이 요소 액세스가 끝난 후 요소를 다시 방문해야하는 경우 요소의 생성기 객체를 다시 만들어야합니다.

s = (x*2 for x in range(5))#迭代器对象
s
tuple(s)
list(s) #此时为空 因为只能访问一次
s = (x*2 for x in range(5))
s.__next__() #访问下一个元素

Yuan Zu 요약

  1. Yuanzu의 핵심은 불변의 시퀀스입니다.
  2. 원래 조상의 액세스 및 처리 속도가 목록 블록보다 빠릅니다.
  3. 정수 및 문자열과 마찬가지로 조상은 사전의 키로 사용할 수 있으며 목록은 사전의 키로 사용할 수 없습니다.

사전

사전은 키-값 쌍의 순서가 지정되지 않은 변수 시퀀스입니다. 사전의 각 요소는 "키 개체"및 "값 개체"를 포함한 "키-값 쌍"입니다. 키 개체를 사용하여 신속하게 가져오고 삭제할 수 있습니다. , 해당 값 개체를 업데이트합니다.

목록에서 아래 첨자 번호를 통해 해당 객체를 찾고 사전에서 키 객체를 통해 해당 값 객체를 찾습니다. 키는 정수 부동 소수점 숫자 문자열 조상과 같은 임의의 불변 개체이지만 이러한 변수 개체의 목록, 사전 및 활성화는 "키"로 사용할 수 없으며 "키"를 반복 할 수 없습니다.

값은 모든 데이터가 될 수 있으며 반복 될 수 있습니다.

사전 생성

  1. {} dict ()로 사전 객체를 생성 할 수 있습니다.

    a = {
          
          'name':'slp','age':18,'job':'teacher'}
    b = dict(name='slp',age=18,job='teacher')
    a = dict([("name","18"),("age",18)])
    c = {
          
          } #空字典对象
    d = dict() #空字典对象
    
  2. zip ()을 통해 사전 객체 만들기

    k = ['name','age','job']
    v = ['slp',18,'teacher']
    d = dict(zip(k,v))
    
  3. fromkeys에 의해 생성값이 비어 있습니다.'S 사전

    a = dict.fromkeys(['name','age','job'])
    

사전 요소에 대한 액세스

  1. 키를 통해 값을 가져오고 키가 없으면 예외를 발생시킵니다.

    a = {
          
          'name':'slp','age':18}
    a['name'] #slp
    a['job'] #KeyError
    
  2. get () 메서드를 통해 값을 가져옵니다. 사용하는 것이 좋습니다. 요점은 지정된 키가 존재하지 않습니다. None을 반환합니다. 지정된 키가 없을 때 기본 반환 개체를 설정할 수도 있습니다.

    a = {
          
          'name':'slp','age':18}
    a.get('name')
    
  3. 여러 키-값 쌍 나열

    a.items()
    
  4. 모든 키 나열, 모든 값 나열

    a.keys()
    a.values()
    
  5. len () 키-값 쌍의 수

  6. 키가 사전에 있는지 확인

    'name' in a
    

사전 요소 추가, 수정, 삭제

  1. 사전에 "키-값 쌍"을 추가하십시오. '키'가 이미 존재하는 경우 이전 값을 덮어 쓰고 존재하지 않는 경우 새 키-값 쌍을 추가합니다.

    a = {
          
          'name','slp'}
    a['address']='sx'
    
  2. update ()를 사용하여 새 사전의 모든 키-값 쌍을 이전 사전에 추가합니다. 키가 반복되면 직접 덮어 씁니다.

    a = {
          
          'name':'slp','age':18}
    b = {
          
          'name':'hp','address':'sx'}
    a.update(b)
    
  3. 사전에서 요소를 삭제하려면 del () 메서드 또는 clear ()를 사용하여 모든 키-값 쌍을 삭제할 수 있습니다. pop ()은 지정된 키-값 쌍을 삭제하고 해당 "값 객체"를 반환합니다.

    a={
          
          'name':'slp',
     	'age':18}
    del(a['name'])
    
  4. popitem () : 키-값 쌍을 무작위로 삭제하고 반환합니다. 사전은 순서가 지정되지 않은 변수 시퀀스이므로 첫 번째 요소와 마지막 요소에 대한 개념이 없습니다. popitem ()은 사전에없는 항목을 팝업으로 표시합니다. 마지막 요소 또는 기타 주문 개념을 하나씩 삭제하려는 경우 매우 효과적입니다.

    a = {
          
          'name':'slp','age':18}
    a.popitem()
    

시퀀스 풀기

시퀀스 풀기는 조상, 목록 및 사전에 사용할 수 있습니다. 시퀀스 언 패킹을 통해 여러 변수에 값을 쉽게 할당 할 수 있습니다.

x,y,z = (20,30,10)
x #20
(a,b,c)=(9,8,10)
a #9
[a,b,c]=[10,20,30]
c #30

딕셔너리에서 시퀀스 언 패킹을 사용하는 경우 기본값은 키에 대해 작업하는 것입니다. 키 값에 대해 작업해야하는 경우 items ()를 사용해야하고 값에 대해 작업해야하는 경우 values ​​()를 사용해야합니다.

s = {
    
    'name':'slp','age':18}
name,age = s
name #'name'
name,age=s.items()
name#{'name','slp'}

테이블 데이터는 사전 및 목록에 저장되고 액세스됩니다.

이름 나이 봉급 시티
가오 샤오이 18 30000 베이징
가오 샤오 어 19 20000 상하이
가오 샤오 우 20 10000 심천
# -*- coding: utf-8 -*-
"""
Created on Fri Jan 15 14:06:22 2021

@author: sangliping
"""

r1 = {
    
    'name':'高小一','age':18,'salary':30000,'city':'北京'}
r2 = {
    
    'name':'高小二','age':19,'salary':10000,'city':'上海'}
r3 = {
    
    'name':'高小五','age':20,'salary':10000,'city':'深圳'}
tb = [r1,r2,r3]
print(tb)
# 获得第二行人的薪资
print(tb[1].get('salary'))
#打印表中所有的薪资
for i in range(len(tb)):
    print(tb[i].get('salary'))
    
# 打印表的所有数据
for i in range(len(tb)):    
    print(tb[i].get('name'),tb[i].get('age'),tb[i].get('salary'),tb[i].get('city'))
    

사전의 핵심 기본 원칙

사전 객체의 핵심은 해시 테이블입니다. 해시 테이블은 희소 행렬입니다. 배열의 각 단위를 버킷이라고합니다. 각 버킷에는 두 부분이 있습니다. 하나는 키 객체에 대한 참조이고 다른 하나는 가치 객체.

모든 버킷의 구조와 크기가 동일하므로 지정된 버킷을 오프셋으로 읽을 수 있습니다.
여기에 사진 설명 삽입

사전의 기본 프로세스에 키-값 쌍을 넣습니다.

a = {
    
    }
a['name']='slp'

딕셔너리가 생성 된 후 배열 길이가 8이라고 가정합니다.
여기에 사진 설명 삽입

키-값 쌍 'name'= 'slp'를 사전 객체 a에 넣어야합니다. 첫 번째 단계는 키의 해시 값을 계산하는 것입니다. 이는 파이썬에서 hash ()로 계산할 수 있습니다. bin(hash('name'))

배열의 길이가 8이므로 계산 된 해시 값의 맨 오른쪽 3 자리를 오프셋으로 사용할 수 있습니다. 즉, 101, 소수점은 5입니다. 오프셋 5에 해당하는 버킷이 비어 있는지 확인합니다. , 키-값 쌍을 입력합니다. 비어 있지 않은 경우 오른쪽 3 자리 숫자를 오프셋 (100)으로 사용합니다. 오프셋 4가있는 버킷이 비어 있는지 확인하고 빈 버킷을 찾아 키를 넣을 때까지 -값 쌍 Go in.
여기에 사진 설명 삽입

키를 기반으로 "키-값 쌍"을 찾는 기본 프로세스

a.get ( 'name')을 호출하면 이름에 따라 키-값 쌍을 찾고 객체를 찾습니다. 첫 번째 단계는 여전히 해시 값을 계산하는 것입니다.

저장의 기본 프로세스 알고리즘과 일치하여 해시 값의 다른 위치에있는 숫자도 순차적으로 사용됩니다. 배열의 길이가 8이라고 가정하면 계산 된 해시 값의 맨 오른쪽 3 자리를 오프셋으로하여 소수점 위치에 해당하는 버킷이 비어 있는지 확인할 수 있습니다. 비어 있으면 None을 반환합니다. 비어 있지 않은 경우 비교 값이 같으면 값으로 반환되고 같지 않으면 다른 비트와 차례로 비교됩니다. 마지막에 여전히 발견되지 않으면 None을 반환합니다.
여기에 사진 설명 삽입

요약하자면 :

  1. 키는 해시 가능해야합니다.
    • 숫자 문자열 조상은 모두 해시 가능합니다.
    • 사용자 지정 개체는 다음 세 가지 사항을 지원해야합니다.
      • hash () 함수 지원
      • __eq__()동등성을 감지하는 지원 방법
      • 만약 a==b다음, 진실 hash(a)==hash(b)도 진실
  2. 사전에는 메모리에 엄청난 오버 헤드가 있으며, 일반적인 시간 공간입니다.
  3. 키 쿼리가 빠름
  4. 딕셔너리에 새 키를 추가하면 해시 테이블의 키가 확장되고 순서가 변경 될 수 있으므로 딕셔너리를 순회하면서 딕셔너리를 수정할 필요가 없습니다.

세트

컬렉션은 무질서하고 가변적이며 요소는 반복 될 수 없습니다. 사실 컬렉션의 맨 아래 계층은 사전에 의해 구현됩니다. 컬렉션의 모든 요소는 사전의 핵심 개체이므로 반복되거나 고유 할 수 없습니다.

컬렉션 생성 및 삭제

  1. {}를 사용하여 컬렉션 개체를 만들고 add () 메서드를 사용하여 요소를 추가합니다.

    a = {
          
          3,5,7}
    a.add(9)
    
  2. set ()을 사용하여 목록 및 튜플과 같은 반복 가능한 객체를 여러 개로 변환합니다. 데이터에 중복 값이 ​​있으면 하나만 유지됩니다.

    a = ['a','b']
    b = set(a)
    
  3. remove ()는 지정된 요소를 삭제하고 clear ()는 전체 컬렉션을 지 웁니다.

수집 관련 작업

수학의 개념과 마찬가지로 Python은 집합에 대한 결합, 교차 및 차이와 같은 연산도 제공합니다.

a = {
    
    1,2}
b={
    
    's','l'}
a|b #并集
a&b #交集
a-b #差集
a.union(b) #并集
a.intersection(b) #交集
a.difference(b) #差集

WeChat에서 [Zixin]을 검색하거나 아래 QR 코드를 스캔하여 친구를 사귀고 함께 진행하세요. 이 기사는 지속적으로 업데이트됩니다. 현재 저는 파이썬 백 번 전투에 대한 연구 노트를 정리하고 있으며 앞으로 더 많은 업데이트를 기대합니다.여기에 사진 설명 삽입

추천

출처blog.csdn.net/weixin_51656605/article/details/112667734