文章目录
我们可能知道字符串、数字、列表、元组、字典是python中的五大基本数据类型。前面的文章已经介绍过数字、字符串、列表,这篇则是关于元组、字典和集合这方面的一些重点知识。(还会提到元组的修改)
1. 元组(与列表最大的区别就是能否更改)
列表(list类):有序,中括号,元素可以被修改
元组(tuple类):有序,小括号,元素不可被修改且不能删除增加
#元组定义一般在结尾多加一个逗号,以区分方法中的参数
tu = (111,22,"alex",(11,22),44,) #定义一个元组
#元组可以索引,可以切片
s = "asjfdkjkfhg"
li = ["safj",123,"alex"]
tu = ("alex","age",43,)
v = tuple(s) #字符串可以转成元组
v1 = tuple(li) #列表可以转成元组
v2 = list(tu) #元组也可以转成列表,而且顺序不会改变
print(v)
print(v1)
print(v2)
结果是:
(‘a’, ‘s’, ‘j’, ‘f’, ‘d’, ‘k’, ‘j’, ‘k’, ‘f’, ‘h’, ‘g’)
(‘safj’, 123, ‘alex’)
[‘alex’, ‘age’, 43]
2. 本不可修改元组,但这样就可以修改了
tu = (11,33,"alex",[1314,22],44,True,(13,"一世"),22,)
print(tu)
tu[3][1] = 520 #列表本身可以修改,所以元组里的列表也可以修改
#tu[6][0] = "一生"----->>>>同理,元组不可修改,元组中的元组也不可修改
print(tu)
结果是:
(11, 33, ‘alex’, [1314, 22], 44, True, (13, ‘一世’), 22)
(11, 33, ‘alex’, [1314, 520], 44, True, (13, ‘一世’), 22)
Ps:元组的第一级元素不可修改,但二、三…级的元素可以修改
tu = (11,33,"alex",[1314,22,['trust me']],44,True,(13,"一世"),33,)
tu[3][1] = 520
tu[3].insert(0,'5发4') #在指定的0位置插入
n1 = tu.count(33) #计算某元素出现次数
n2 = tu.index(44) #返回某元素的索引,即下标
print(tu)
print(n1)
print(n2)
结果是:
(11, 33, ‘alex’, [‘5发4’, 1314, 520, [‘trust me’]], 44, True, (13, ‘一世’), 33)
2
4
3. 字典(dict类):键值对,无序(列表和元组都有序)
列表、元组、字典三者可以无限嵌套,像这样:
info = {
"k1": "v1",
"k2": "v2",
"True": "v3",
"k3": [
11,
22,
33,
{
"kk1": "vv1",
"kk2": "vv2",
"kk3": (11,22,)
}
],
"k4" : (11,22,33,44,)
}
#找到11这个数:
v = info["k3"][3]["kk3"][0]
print(v)
#字典的删除操作:
del info["k1"] #会将键值都删除
Ps:数字,字符串,元组,布尔值(要注意1和0是否重复)都可以作为字典的key,而列表和字典不可以作为key,因为它们可修改,是动态的
4. 字典的循环遍历
for item in info.keys(): #循环key,就是循环键值对
print(info)
for item in info.values(): #循环values,即值
print(item)
for item in info.keys(): #key与value都循环:
print(item,info[item])
因为这里的结果太长了,显得冗余,就不展示了。
关于key与value都循环还有一种简便的写法
#py简化:
for k,v in info.items(): #把键值对作为一个items
print(k,v)
5. 特殊方法创建、取值字典
#根据序列来创建字典,指定的值都为第二个参数
dic = dict.fromkeys(["k1",123,"k3"],123)
print(dic)
#用dic.get()的好处是,若key对应的值不存,不会报错:
v = dic.get('k11111')
print(v) #默认返回值是None
v1 = dic.get('k11111',1111) #若不存在'k11111',则返回1111
print(v1)
结果是:
{‘k1’: 123, 123: 123, ‘k3’: 123}
None
1111
6.在查询字典的键时,若键不存在,则创建该键
dic.setdefault(key,[]).append(value)
这个语句可以很好得解决字典中键的查询问题,同时加入该键值对。
7. pop()删除在字典中的用法
pop()删除最大的好处就是删完了可以将值保存个一个变量
dic = {
"k1": "v1"
"k2": "v2"
}
v = dic.popitem() #随机删除一个键值对并默认将value赋值给v
print(dic,v)
k,v = dic.popitem() #随机删除一个键值对并默认将key赋值给k,将value赋值给v
结果是:
{‘k1’: ‘v1’} (‘k2’, ‘v2’)
k1 v1
8. 字典键值对修改的2种方法
#设置值,已存在就不设置,获取原来的值;不存在就设置,获取设置后的值:
dic = {
"k1": "v1",
"k2": "v2"
}
v = dic.setdefault("k1111",123)
print(dic,v)
dic.update(k1=123,k3=345,k5=322) #更新dic字典,若不存在的key,则添进去
print(dic)
结果是:
{‘k1’: ‘v1’, ‘k2’: ‘v2’, ‘k1111’: 123} 123
{‘k1’: 123, ‘k2’: ‘v2’, ‘k1111’: 123, ‘k3’: 345, ‘k5’: 322}
很明显,字典中加入元素也是无序的
9. 键值对(key与value)的 in 用法
dic = {"k1": "v1"
}
v = "k1" in dic
vv = "v1" in dic.values()
print(v,vv)
结果为:True True
- 我们都知道布尔值中的1是真,0是假,其实还有很多False,
布尔值中的假:
None “” () [] {} 0
10. 五大数据类型分类总结
到此为止,五大数据类型就都总结完了,这里再简单分一下类
按是否可变来分
可变:列表、字典、集合
不可变:字符串、数字、元组
s = frozenset(‘hello’) #定义不可变类型集合
s = set(‘hello’) #正常集合是可变的
按访问顺序来分
直接访问:数字
顺序访问:字符串、列表、元组
映射访问:字典
- 再介绍一种数据类型,集合
(集合:花括号,不重复,无序,集合中元素必须是不可变类型)
s = {"alex",11,33,22,"sb"}
s = set("hello") #结果是'e','l','h','o' #无序且不重复
s.add('3') #添加元素
s.pop() #因为无序,所有会随机删除一个元素
print(s)
结果是:
{‘l’, ‘o’, ‘3’, ‘e’}
Ps:第二步,将原来的一整串集合设置成了分开放进去的字符串,因为集合不重复,所以集合变成只有4个元素,每个元素都是一个字符
11. 集合的交叉、并、补集
s = {"alex",11,33,22,"sb"}
s.remove('sb') #指定删除
s.discard('sbbbb') #不存在时不会报错,相当于不操作
s1 = {33,22,11,'大黄蜂','鸡排饭','猪'}
print(s.union(s1)) #求s与s1的并集
print(s | s1) #求s与s1的并集
print(s - s1) #求s与s1的差集,s独有的
print(s & s1) #求s与s1的交集,s与s1都有的
print(s ^ s1) #求s与s1的交叉补集,s独有与s1独有组成的集合
结果是:
{33, ‘alex’, 11, ‘猪’, 22, ‘鸡排饭’, ‘大黄蜂’}
{33, ‘alex’, 11, ‘猪’, 22, ‘鸡排饭’, ‘大黄蜂’}
{‘alex’}
{33, 11, 22}
{‘alex’, ‘鸡排饭’, ‘大黄蜂’, ‘猪’}
12. 字符串拼接的两种方法(百分号、format())
#百分号拼接类似C语言中的输出变量
msg = 'I am %s my hobby is %s' %('Ross,','playing game')
print(msg)
#常用格式化之format后类似一个元组,下标从0开始,多余的舍弃
tpl = "i am {1}, age {2}".format("seven","Andy",18)
print(tpl)
#格式化保留小数点:
a = 98.32425545443
tp2 = "我有{:.2f}%的可能性会揍你".format(a)
print(tp2)
结果是:
I am Ross, my hobby is playing game
i am Andy, age 18
我有98.32%的可能性会揍你