python 笔记17
1.元组 tuple
元组被称为只读列表,即数据可以被查询,但不能被修改,所以,列表的切片操作同样适用于元组,元组写在小括号()里面,元素之间用逗号隔开。
虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表。
构造包含0个或1个元素的元组比较特殊,所有一些额外的语法规则:
tup1 = () #空元组
tup2 = (20,) #一个元素,需要在元素后添加逗号
作用:
1.对于一些数据我们不想被修改,可以使用元组
2.另外,元组的意义还在于,元组可以映射(和集合的成员)中当做键使用——而列表则不行;元组作为很多内建函数和方法的返回值存在。
关于可读:
a = (1,2,3,4)
print(a[1])
a[1] = 5
print(a)
输出: 错误!
这里a是一个元组,元组列表是只读的,所以不能被修改。
2.嵌套
a = [[1,2,4],'Alex',4,(2,3,4)]
b = a[0]
print (b)
输出: [1,2,4]
上面是列表中放元素、列表、元组。
如果要输出a中第一个列表中的那个2呢?
a = [[1,2,4],'Alex',4,(2,3,4)]
b = a[0][1] # 找不同级列表的元素
print (b)
输出: 2
3.字典
字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、元组。
不可变类型:整形、字符串、元组
可变类型: 列表、字典
字典(dictionary)是除列表意外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典的两个特点: 无序、键唯一
创建字典:
dic={'name':'flamingo','age':'23','hobby':'girl'}
print(dic[name])
输出: flamingo
另一种创建字典的方法:
dic = dict((('name','flamingo'),('age','23'),))
print(dic)
输出: {'name': 'flamingo', 'age': '23'}
但是,字典里面的键不能放可变类型:
dic = {[1,2,3],'name':'flamingo'}
报错: 不支持的哈希类型,就是因为列表是可变类型。
放不可变类型:
dic={'name':'alex','age':'35','hobby':{'girl_name':'铁锤','age':35}}dic1 = {'name': 'alex', 'age': 36, 'sex': 'male'}
则不会报错。
3.1 字典·增
dic1 = {'name':'flamingo'}
dic1['age'] = 18
print(dic1)
输出: {'name': 'flamingo', 'age': 18}
dic1.setdefault('age',34)
1.如果能找个age这个键,则不修改age的值;如果没有age这个值,就添加age:34.
2 .setdefault 有返回值:
dic1 = {'age': '18'}
ret = dic1.setdefault('age',34)
print (ret)
输出: 18
3.2字典·查
dic1 = {'name': 'flamingo', 'age': 23, 'sex': 'male'}
print(dic1[name])
输出: flamingo
如果不知道里面有什么键,可以这么查:
dic1 = {'name': 'alex', 'age': 36, 'sex': 'male'}
print(dic1.keys())
print(dic1.values())
print(dic1.item())
输出:
dict_keys(['name', 'age', 'sex'])
dict_values(['alex', 36, 'male'])
dict_items([('name', 'alex'), ('age', 36), ('sex', 'male')])
上面输出的结果有dict_keys() 、dict_values()和dict_items()这些固定的词组,
如果我们想让它输出成列表的形式,可以加* list():
dic1 = {'name': 'alex', 'age': 36, 'sex': 'male'}
print(list(dic1.keys()))
print(list(dic1.values()))
print(list(dic1.item()))
输出:
['name', 'age', 'sex']
['alex', 36, 'male']
[('name', 'alex'), ('age', 36), ('sex', 'male')]
3.3 字典·改
dic1 = {'name': 'flamingo', 'age': 36, 'sex': 'male'}
dic1['age'] = 23 #类似列表,但列表[]中写的是位置,而字典中是键的名称
print(dic1)
输出:
{'name': 'alex', 'age': 23, 'sex': 'male'}
类似列表中的.extent,字典的叠加方式为:
dic4 = {'age':23,'name':'flamingo','hobby':'python'}
dic5 = {'age':'18','job':'studengt'}
dic4.update(dic5)
print(dic4)
输出:
{'age': '18', 'name': 'flamingo', 'hobby': 'python', 'job': 'studengt'}
可见,dic4.update(dic5) ,是把dic4中原来存在的键的值用dic5中的替换了,而如果dic4中没有的则直接加上去。
3.4 字典·删
dic1 = {'name': 'flamingo', 'age': 36, 'sex': 'male'}
del dic1['name'] #删除了name键值对
dic1.clear() #清空列表
dic1.pop('age') #删除并返回一个值,36
dic1.popitem() #随机删除某组键值对,并以元组方式返回
3.5 字典·其他操作·赋同一个值
给所有的键给同一个值:(或同一个列表)
dic6 = dict.fromkeys(['host1','host2','host3'],'test')
print(dic6)
输出:
{'host1': 'test', 'host2': 'test', 'host3': 'test'}
3.6 字典·嵌套
3.7 字典·sorted(dict)
sorted(dict) : 返回一个有序的包含字典所有key的列表
dic = {'5':'555','2':'222','4':'444'}
print(sorted(dic))
print(sorted(dic.items()))
print(sorted(dic.values()))
输出:
['2', '4', '5']
[('2', '222'), ('4', '444'), ('5', '555')]
['222', '444', '555']
3.8 字典遍历
方式一: (推荐,效率高)
dic1 = {'name': 'flamingo', 'age': 36, 'sex': 'male'}
for i in dic1:
print(i,dic1[i])
输出:
name flamingo
age 36
sex male
方式二: (不推荐,多了一个转换的过程,效率不高)
dic1 = {'name': 'flamingo', 'age': 36, 'sex': 'male'}
for i,v in dic1.items():
print(i,v)
输出:
name flamingo
age 36
sex male