元组和字典
元组
元组就是不可变的列表
元组是容器型数据类型,将()作为容器的标志,里面多个元素用逗号隔开:(元素1, 元素2, 元素3,…)
元组不可变(不支持元素的增删改);元组是有序的(支持下标操作)
元素:任何类型的数据,并且可以重复
t1 = (10, 23, 90, 10)
print(type(t1), t1)
空元组
t2 = ()
2.只有一个元素的元组: (元素,)
如果一个元组中有且只有一个元素,那么唯一的元素后面必须加逗号
pythonlist1 = [23]
print(list1, type(list1)) # [23] <class 'list'>
t3 = (23)
print(t3, type(t3)) # 23 <class 'int'>
t4 = (23,)
print(t4, type(t4)) # (23,) <class 'tuple'>
3.省略括号
在没有歧义的情况下,可以省略元组的(),直接将多个元素用逗号隔开来表示一个元组
t5 = 'abc', 10, 100, True
print(type(t5), t5) # <class 'tuple'> ('abc', 10, 100, True)
t6 = 10, 20, 30 * 2
print(t6) # (10, 20, 60)
4.获取元素
1)列表获取元素的方法元组都支持
song = ('葫芦娃', '海阔天空', '霸王别姬', '夜曲', '稻香', '下山')
print(song[1], song[-5])
print(song[2:]) # ('霸王别姬', '夜曲', '稻香', '下山')
for x in song:
print('x:', x)
for index, item in enumerate(song):
print(index, item)
for index in range(len(song)):
print(song[index])
2)让变量的个数和元组中元素的个数保持一致来获取元组所有元素的值
变量1,变量2,变量3,… = 元组
t7 = (10, 102, 32)
x, y, z = t7
print(x, y, z) # 10 102 32
x, y, z = 10, 102, 32
m, n = t7 # ValueError: too many values to unpack (expected 2)
l, m, n, o = t7 # ValueError: not enough values to unpack (expected 4, got 3)
3)同时用多个变量获取元组元素的时候,变量的个数可以比元组中元素的个数少,但是必须有且只有一个变量前有*
stu = ('小明', '男', 30, 89, 70, 170)
m1, m2, *m3 = stu
print(m1, m2, m3) # 小明 男 [30, 89, 70, 170]
m1, *m2, m3 = stu
print(m1, m3, m2) # 小明 170 ['男', 30, 89, 70]
*m1, m2, m3 = stu
print(m2, m3, m1) # 70 170 ['小明', '男', 30, 89]
name, sex, *message, height = stu
print(name, sex, height, message) # 小明 男 170 [30, 89, 70]
5.元组相关操作
列表相关操作元组都支持
t1 = (1, 2, 3)
t2 = ('abc', 'name')
print(t1 + t2) # (1, 2, 3, 'abc', 'name')
print(t1*3) # (1, 2, 3, 1, 2, 3, 1, 2, 3)
print((1, 2, 3, 4, 5) > (10, 0)) # False
print(10 in (1, 2, 3)) # False
print(3 not in (1, 2)) # True
print(sum((10, 20, 30))) # 60
print(max((1, 23, 100, 89, 70))) # 100
print(min((1, 23, 100, 89, 70))) # 1
nums = (1, 23, 100, 89, 70)
new_nums = sorted(nums)
print(new_nums) # [1, 23, 70, 89, 100]
print(len(nums)) # 5
print(tuple('abc')) # ('a', 'b', 'c')
print(tuple(new_nums)) # (1, 23, 70, 89, 100)
print(tuple(range(10, 15))) # (10, 11, 12, 13, 14)
字典
定义一个变量保存一个学生的信息: 姓名、性别、年龄、身高、体重、成绩
stu = ['小明', '男', 30, 177, 80, 78]
print(stu[0], stu[-1])
stu = {'姓名': '小明', '性别': '男', 'age': 30, '身高': 177, 'weight': 80, 'score': 78}
print(stu['姓名'], stu['score'])
scores = [23, 34, 56, 78, 45, 90]
1.什么使用字典
同时保存多个意义不同的数据就使用字典
2.什么是字典(dict)
字典是容器型数据类型,将{}作为容器的标志, 里面多个元素用逗号隔开(元素必须是键值对): {键1:值1, 键2:值2, 键3:值3,…}
字典是可变的(支持增删改);字典是无序的(不支持下标操作)
元素:必须是键值对;键 - 必须是不可变的数据(数字、字符串、元组),一般使用字符串;键是用来对值进行描述和区分的唯一的值 - 没有要求
1)空字典
d1 = {}
print(type(d1)) # <class 'dict'>
2)键是不可变
d2 = {'name': '小明', 10: 100, (1, 2): 200}
print(d2) # {'name': '小明', 10: 100, (1, 2): 200}
报错!列表不能作为键
d3 = {‘name’: ‘小明’, 10: 100, [1, 2]: 200} TypeError: unhashable type: ‘list’
3)键是唯一
d3 = {'name': '小明', 'age': 18, 'name': '张三'}
print(d3) # {'name': '张三', 'age': 18}
4)字典无序
print({'a': 10, 'b': 20} == {'b': 20, 'a': 10}) # True
print([1, 2, 3] == [3, 1, 2]) # False
3.字典的增删改查
1)查 - 获取值
1.1)获取单个值
“”"
a.字典[key] - 获取指定key对应的值(如果key不存在会报错!)
b.
字典.get(key) - 获取指定key对应的值(如果key不存在不会报错,返回None)
字典.get(key, 默认值) - 获取指定key对应的值(如果key不存在不会报错,返回指定的默认值)
“”"
dog = {'name': '财财', 'age': 2, 'sex': '母狗', 'breed': '土狗'}
print(dog['sex'], dog['name']) # 母狗 财财
print(dog.get('age')) # 2
print(dog.get('breed', '公')) # 土狗
print(dog[‘weight’]) # KeyError: ‘weight’
print(dog.get('weight')) # None
print(dog.get('weight', 0)) # 0
1.2)遍历
“”"
for 变量 in 字典:
pass
注意:变量依次取到的是字典的key
“”"
l1 = [10, 20, 30]
a = 10
键值对离开了字典无效
d1 = {'a': 10, 'b': 20}
b = ‘a’: 10
dog = {'name': '财财', 'age': 2, 'sex': '母狗', 'breed': '土狗'}
for x in dog:
print('x:', x, dog[x])
2) 增、改
字典[key] = 值 - 当key存在就是修改指定key对应的值;当key不存在就是添加键值对
dog['name'] = '大黄'
print(dog) # {'name': '大黄', 'age': 2, 'sex': '母狗', 'breed': '土狗'}
dog['age'] = 3
print(dog) # {'name': '大黄', 'age': 3, 'sex': '母狗', 'breed': '土狗'}
dog['weight'] = 15
print(dog) # {'name': '大黄', 'age': 3, 'sex': '母狗', 'breed': '土狗', 'weight': 15}
3) 删
del 字典[key] - 删除指定key对应的键值对
字典.pop(key) - 取出指定key对应的值,并且返回
dog = {'name': '财财', 'age': 2, 'sex': '母狗', 'breed': '土狗'}
del dog['sex']
print(dog) # {'name': '财财', 'age': 2, 'breed': '土狗'}
del_name = dog.pop('name')
print(dog, del_name) # {'age': 2, 'breed': '土狗'} 财财