人生苦短,我学python
)
一、散列类型
1.数值类型:int float bool -> 存储一个数值
2.序列类型:str list tuple -> 存储多个元素
3.散列类型:set dict
散列类型的特征:
1. 无序 =》无下标
2. 内部元素不重复
1、 集合(set)
1.1 概念
集合(set) -> 负责存储【不重复的数据】,并且是【无序存储】的容器,主要用来去重和逻辑比较
1.2 性质
唯一性:元素唯一存在,不能重复
可变性:同列表意义,集合可以通过一些方法进行修改操作
无序性:集合没有办法访问或者操作指定位置的元素。
创建集合直接使用 {}
set1 = {1, 2, 3, 4, 1, 2, 6, 5, 7, 7, 7, 9, 8, 2, 8} print(set1) # 正常输出一个集合,里面的数据默认去重 print(set1[1]) # 散列类型无序的,不可以通过下标提取元素,报错 print(type(set1))
语法:
集合名 = {数据1,数据2,数据3,....} # 如果有重复数据,不会被添加到内存空间里面
注意:创建空集合的时候必须使用 set() ,而不能{},{}是表示空字典
集合的基本操作 --》 去重
li = [1, 2, 3, 4, 1, 2, 6, 5, 7, 7, 7, 9, 8, 2, 8] 利用集合帮助列表去重 se = set(li) # list->set 利用集合的唯一性去重 li = list(se) # 再将set-> list print(li)
快速写法
li = list(set(li)) print(li)
1.3 运算
运算操作 | Python运算符 | 含义 |
交集 | & | 取两集合公共的元素 |
并集 | | | 取两集合全部的元素 |
差集 | - | 取一个集合中另一集合没有的元素 |
成员运算 | in 和 not in | 判断一个某个元素是否在或者不在集合中 |
集合可以进行逻辑判断,集合的运算
集合1 & 集合2 --》判断交集 # shift + 7 集合1 | 集合2 --》判断并集 # sfhit + \ 集合1 - 集合2 --》判断差集
交集:两个集合里面共有的数据
并集:两个集合里面的全部数据
差集:集合1 - 集合2 【集合1中减去和集合2共有的元素】【去掉交集之后的,结果就是差集】
set1 = {1, 2, 3} set2 = {3, 4, 5}
&
交集:取两个集合的公共元素
print(set1 & set2) # {3}
|
并集:取两个集合的全部元素
print(set1 | set2)
-
差集:减掉共有的
print(set1 - set2) # 以set1为全集,减去set1和set2共有的 12 print(set2 - set1) # 以set2为全集,减去set1和set2共有的 45
集合的作用:
1.存储非重复数据
2.用于将序列类型去重,逻辑判断(交集,并集,差集)
1.4 方法
增
add():参数为要添加的对象,通过多次添加数据可以发现添加后的元素位置不确定
s = {"111"} s.add("222") print(s) s.add("333") print(s) s.add("444") print(s) s.add("555") print(s)
update() 参数为序列类型,会将序列元素拆分,随机添加到集合中
s = {"111"} lis = ['111', '222', '333', '444'] s.update(lis) # 将lis拆分,并随机插入 print(s)
删
pop() : 删除第一个元素
仅在cmd运行时候,才会随时删除,pycharm对元素的地址进行了加强。所以python中默认保持删除第一个元素
remove(): 有参数,参数为要删除的元素,如果元素不存在则报错
```python s = {"111"} s.add("222") print(s) s.add("333") print(s) s.add("444") print(s) s.add("555") print(s) s.remove("222") s.remove("111") print(s) ```
clear():清空集合中的元素
2、字典(dict)
2.1 概念
字典(dict)是用来保存一些有典型的 ”对应关系“ 的数据类型,特点就是用键值对
的方式来存储数据
键值对:key:value
字典的表现形式:
字典和集合一样也是用花括号,不过花括号里面如果存储的 键值对(说明关系的数据),那么它就是字典。
字典相比其他容器更适合描述一个对象
字典的创建语法格式
字典名 = {键名1:值 , 键名2:值 , .....} # 里面写的都是键值对
通讯录的存储
call = { "aaa": 10086, "bbb": 10010, "ccc": 10000, "ddd": 12010 } 表示个人名片 nr = { "姓名": "aaa", "年龄": 18, "工作": "摆烂" }
字典的访问方式:
字典只能通过key去查询value
字典名[键] # 跟列表相似,但是列表是下标,字典是键
2.2 性质
1.无序
:没下标,字典是直接通过键值对的方式存储数据的,所以通过键来取值
字典名[键]
2.不重复
:字典的键是不能重复
dict2 = {"a": 1, "b": 2, "c": 3, "c": 4} print(dict2) # 默认会覆盖,取最后一个键
3.可变性:
字典里面的数据是可变的,而且允许嵌套
dict2 = {"a": 1, "b": 2, "c": 4} dict2['b'] = 100 # 直接赋值,修改 print(dict2) dict2['b'] = ["bai","lan"] # value还可以是 别的容器 print(dict2)
2.3 方法
增
直接赋值
zd = {"a": 1, "b": 2} zd["c"] = 3 # 直接赋值增加 zd["d"] = 4 # 直接赋值增加 print(zd)
改
直接赋值
zd = {"a": 1, "b": 2 ,"c": 3} zd["c"] = 6 # 直接赋值 , 如果原本已经有了,那就是改,没有就是增 zd["d"] = 7 # 增 print(zd)
删
pop(键名) :
根据指定的键名,删除键值对
zd.pop("a") # 通过键名删除键值对 print(zd) clear() : 清空字典,将字典变为空字典 zd.clear() print(zd) # 空字典
查
get() :
通过键名,获取值
d = {"a": 1, "b": 2} # print(zd["c"]) # 如果键不存在会报错 print(zd.get("c")) # 如果键不存在不会报错
keys() :
获取所有的键,返回一个伪列表
values() :
获取所有的值,返回一个伪列表
zd = {"a": 1, "b": 2} print(zd.keys()) # ["a","b"] for i in zd.keys(): # 遍历key print(i) print(zd.values()) # [1,2] for i in zd.values(): # 遍历value print(i)
都是无下标,不可重复
二、字符串格式化
方便字符串里面携带变量
1、%方法(占位符)
在程序开发时候,有的时候不确定使用的数据具体是啥,就先占用一个位置,后续再使用值来填充
%也是分为不同种类型的
常见的占位符
%s = 字符串 =》占了一个位置,只能放字符串
%d = 整数 =》占了一个位置,只能放整数
%f = 小数=》默认保留6位小数点
%.1f -->保留一位小数
%.2f -->保留二位小数
%.xf -->保留x位小数
s = "我叫%s,我今年%d岁,体重是%.2f" # 模板 print(s % ("111", 18, 155.5)) print(s % ("222", 19, 90.5)) print(s % ("333", 30, 13.5)) # 可以无限使用s这句话,不用再重复写,只需要提供数据即可
2、f-format
语法:在字符串前面加上f/F,把要输出的变量用大括号{}进行包囊
name = "摆烂阳" age = 18 height = 177.7 # 大括号里面的数据,还可以直接操作 print(f"大家好,我叫{name[0]},我今年{age+1}岁,今年身高{height-1}")
其他
name = "摆烂阳" age = 18 height = 177.7 # 字符串的方法 format 了解即可 print("大家好,我叫{},我今年{}岁,今年身高{}".format(name,age,height))