python开发基础——day8 散列类型与字符编码

一、初识散列类型(无序序列)

数据类型分为3种:
    1.数值类型:int/float/bool 只能存储单个数据
    2.序列类型:str/list/tuple,有序的存储多个数据-->有序类型有下标可以进行索引切片步长的操作  
    3.散列类型:集合,字典
        1.可以存放多个数据
        2.内部是无序的(没有下标)
        3.内部数据不重复

二、认识集合

集合set:表示形式为用大括号{}包裹起来存的数据,里面的数据用逗号隔开

集合的特性:
    1.唯一性
    2.无序型
    主要就是用来进行去重和逻辑判断
    
语法:
    集合名={数据1,数据2,数据3,...}
    
例:
    names={'张三','李四','王五','麻子'}
    print(names)
    print(type(names)) #<class 'set'>

    num={1,5,6,7,8,9,1,5,5,6,6,7,7}
    print(num) #正常输出一个集合,里面重复元素自动去除,代表集合的唯一性
    # print(num[0]) #报错 因为集合是无序类型 没有下标
    
集合可以进行简单的逻辑运算 交并差集
集合1 & 集合2-->获取交集-->一个数据,两个集合里都有它
集合1 | 集合2-->获取并集-->两个集合所有的数据(去重)
集合1 - 集合2-->获取差集-->两个集合之间,自己独有的数据

生活例子:
    碗a{'花菜','豆腐','梅菜'}
    碗b{'鸡肉','花菜','豆腐'}
       
交集-->两个碗里都有的菜-->'花菜','豆腐'
并集-->两个碗里所有的菜-->'花菜','豆腐','梅菜','鸡肉'
差集-->碗a-碗b-->碗a独有的菜-->'梅菜'
            碗b-碗a-->碗b独有的菜-->'鸡肉'
    
num1={1,2,3}
num2={3,4,5}
print(num1&num2) #{3}
print(num1|num2) #{1, 2, 3, 4, 5}
print(num2-num1) #{4, 5}
print(num1-num2) #{1, 2}

集合里可以放很多数据(不能放列表以及集合)
talk={'你好',1,2,9.9,True,(1,2,3),[1,2]}
print(talk) #不能放列表集合,会报错

#遍历集合
names={'张三','李四','王五','麻子'}
for i in names:
    print(i)

集合的方法

room= {'麻子','高启盛','老莫','高启强'}

1、增

add:添加一个数据到集合里
    集合.add(数据)
    room.add('好好学习') #随机 因为是无序类型所以随机增加
    print(room)

update:把一个序列类型打散后添加到集合里
    集合.update(序列数据)
    room.update('别做坏事')
    print(room)

2、删

pop:删除一个数据(随机删除)
    集合.pop()
    room.pop()
    print(room)

remove:删除指定的数据
    集合.remove(数据)
    room.remove('高启强')
    print(room)
    
clear:清除所有数据
    集合.clear()
    room.clear() #set() 空集合
    print(room)

三、认识字典

字典dict:表示形式是用{}大括号包裹起来的数据,存储数据是以键值对的方式存储,数据之间用逗号隔开,主要存储一些带有说明性质的数据
    键值对 左边是键 中间冒号 右边是值
    key:value
        
语法:
    字典名={键:值,键值对,....}
    
字典的输出
    print(字典名)
    print(info)
    print(type(info)) #<class 'dict'>
    
    print(字典名[键名]) #输出指定键的值
    print(info['姓名']) #输出键值,伊尔
    
    info={'伊尔',18,8.8} #这里的数据如果不加注释,可能不清楚表示的是什么东西
    所以如果要的数据,有明显的对照关系,就可以用字典来保存,看起来更加的清晰明了
    
注意:
    1.字典是通过键值对的方式来获取数据,而不是通过下标索引获取
    2.字典里的键是不可变的,只能使用数字,字符串或者元组,不能使用列表,键名一般是用字符串或整型来表示
    day=(2,3)
    food={
        1:'肉',
        '水果':'葡萄',
        day:'打折'
    }
    print(food)
    info2={
        [1,2]:'伊尔'
    }
    print(info2)
    3.字典里键值是可以修改,还可以嵌套(字典里也可以嵌套字典)
    info3={
        '姓名':'伊尔',
        '余额':[8.8,9,10],
        '地址':{1:'工作地址',2:'家乡地址'}
    }
    4.字典里键名是唯一的
    info4={
        '姓名':'伊尔',
        '年龄':18,
        '年龄':19,
        '年龄':20,
    }
    print(info4) #只会保留最后的这个键值对
    
总结:用一个看起来更清晰的方式来保存数据,保存方式为键值对

info5={
    '姓名':'伊尔',
    '余额':8.8,
    '年龄':18
}
#字典遍历
for i in info5:
    print(i) #i拿到的是键
    print(info5[i])

字典方法

info={
    '姓名':'伊尔',
    '余额':8.8,
    '年龄':18
    }

1、增

setdefault:给字典添加一个键值对,如果已经有这个键了就不会新增
    [1.新增一个键,没有写值,值默认为空]
    字典.setdefault(键名)
    info.setdefault('身高') #没有新增值,值默认为None
    print(info)

    [2.新增一个键值对]
    字典.setdefault(键名,值)
    info.setdefault('家乡','湖南')
    print(info)

2、删

pop:通过键名删除指定的数据
    字典.pop(键名)
    info.pop('年龄')
    print(info)

popitem:删除一个键值对,从最后一个数据开始删
    字典.popitem()
    info.popitem()
    print(info)

clear:清除整个字典
    字典.clear()

3、改

update:以键值对的方式修改数据,如果没有就新增
    [1.修改键的值]
    字典.update({键:值})
    info.update({'姓名':'张三'})
    print(info)

    [2.如果没有这个键值对,就转为新增]
    字典.update({键:值})
    info.update({'爱好':'听音乐'})
    print(info)
    
    [3.增加多个键值对]
    字典.update({键:值,键:值})
    info.update({'职业':'律师','性别':'男'})
    print(info)
    
字典[键名]=值 #修改指定键的值,键是存在的情况下会将原来的值进行修改操作 否则添加为新的键值对
info['性别']='男' #找到info里面的性别,把值改为男
info['生肖']='龙' #也算是一个新增方法,创建新的键值对
print(info)

4、查

字典跟集合一样是无序序列,所以是无法通过下标进行获取数据,但是字典有查询数据的方法,但是查询的方法也依旧需要加print包裹方法输出

get:通过键名,获取值,如果没有这个键,输出None
    字典.get(键名)
      print(info.get('余额'))
    print(info.get('籍贯'))    

keys:获取所有的键
    字典.keys()
       print(info.keys())

values:获取所有的值
    字典.values()
    print(info.values())

items:获取所有的键值对
    字典.items()
    print(info.items())

四、声明空变量

集合名=set() #声明空集合
字典名={} #声明空字典
字符串名='' #声明空字符串
列表名=[] #声明空列表
元组名=() #声明空列元组

五、字符编码

计算机语言最底层是由0和1组成,计算机是怎么做到把一堆的0和1变成我们看到的字呢-->字符编码

字符编码--翻译工具--把计算机的机器码翻译成人类能看得懂的字

第一套字符编码叫ascii码,里面收纳了一些常用符号,数字,字母-->没有中文或者其他语言

ascii码表用法用点类似于字典-->每个字在表里都有一个对应的序号,可以通过序号找到字符,也可以通过字符找到序号

但是随着科技进步发展,很多国家都拥有了自己的计算机技术能力,这时候ascii码就不能满足需求-->我要用中文/韩文

后面很多国家,地区都自己研发了一套字符编码
    中国研发出GBK编码-->有两万多个汉字
    同时间中国台湾-->BIG5,大五码,繁体字
    
每个国家的语言不同 所以只会显示自己国家的文字
用别的国家的软件就很容易会出现问题
就比如说如果用GBK编码用BIG5码打开就是乱码不通用

针对这个问题,有个国际组织,专门收集了全世界大部分国家的语言文字,汇总做了一个大的字典并推行使用,以后统一用大字典尽量避免乱码-->utf-8

核心点:
    1.目前世界上最主流的编码是utf-8#大部分默认用utf-8
    2.一个程序是用什么编码写的,你就要用对应的编码去读取,否则会出现问题

在程序每个字都是有对应的序号
ord(字符)-->通过字符找到序号
chr(序号)-->通过序号找到字符

print(ord('a'))
print(ord('B'))
print(chr(66))
print(chr(100))
print('a'>'B') #对应的序号在比较大小

六、练习

1.有个列表[1,1,1,2,3,2,3,3,4,5,5]对它进行去重,并输出去重后的'列表'
2.有两个集合,分别为报名对应班级的学员名单,请获取里面的交集,并集与差集
    grade1={"周杰伦","谢霆锋","陈奕迅","林俊杰"}
    grade2={"谢霆锋","陈奕迅","吴彦祖","彭于晏"}
3.用字典的方式给自己写一个"信息表",并进行增删改查操作(姓名,年龄,身高体重这些)
    1.增加一个键值对
    2.修改一个键值对
    3.删除一个键值对
    4.获取里面的键,值与键值对   
    5.通过键名,获取 "姓名"的值

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值