初学者python笔记(元组、字典)

我们可能知道字符串、数字、列表、元组、字典是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]

  1. 本不可修改元组,但这样就可以修改
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

  1. 字典(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,因为它们可修改,是动态的

  1. 字典的循环遍历
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)
  1. 特殊方法创建、取值字典
#根据序列来创建字典,指定的值都为第二个参数
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

  1. 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

  1. 字典键值对修改的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}
很明显,字典中加入元素也是无序的

  1. 键值对(key与value)的 in 用法
dic = {"k1": "v1" 
}
v = "k1" in dic
vv = "v1" in dic.values()
print(v,vv)

结果为:True True

  1. 我们都知道布尔值中的1是真,0是假,其实还有很多False,
    布尔值中的假:
    None “” () [] {} 0

  2. 到此为止,五大数据类型就都总结完了,这里再简单分一下类
    按是否可变来分
    可变:列表、字典、集合
    不可变:字符串、数字、元组
    s = frozenset(‘hello’) #定义不可变类型集合
    s = set(‘hello’) #正常集合是可变的

    按访问顺序来分
    直接访问:数字
    顺序访问:字符串、列表、元组
    映射访问:字典

  3. 再介绍一种数据类型,集合
    (集合:花括号,不重复,无序,集合中元素必须是不可变类型

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个元素,每个元素都是一个字符

  1. 集合的交叉、并、补集
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’, ‘鸡排饭’, ‘大黄蜂’, ‘猪’}

  1. 字符串拼接之百分号拼接与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%的可能性会揍你

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章