1.列表list补充
- 数学相关运算
- 数学运算 + 、*
列表1 + 列表2 - 将两个列表中的元素合并产生新的列表(原列表不会改变)
列表*整数N 列表中的元素重复N次产生新的列表
list1 = [1, 2, 3]
list2 = ['name', 'age']
new_list = [1, 2, 3] + ['name', 'age']
print(new_list, list1, list2)
print(list1*3, list1)
- 比较运算 要求类型一致
- ==, !=、> < >= <=
print([1, 2] == [2, 1])
print([1, 2] == [1, 2])
# > < >= <= 依次比较同位置上元素的大小,分出大小则作为列表的大小
print([2, 2, 3] > [1, '2'])
- 内置函数
- len(列表/序列) , sum(列表/序列)
sum只能求和 纯数字列表 - list(序列) - 将指定的序列转换成列表
# print(max([1, 'a'])) 只支持内部元素支持大小比较的序列,此处报错
print(list(range(9)))
4.列表相关方法
# 列表.count(元素) - 返回指定元素在列表中出现的次数
print([1, 3, 4, 1, 5].count(1))
# list.extend(seq) -将序列中的元素,添加到列表里面 无返回值
print(list1.extend('sf'), list1)
# list.index(元素) - 返回指定元素在列表中出现的下标,如果有多个,返回第一个没有则报错
list1 = [1, 2, 3, 's', 'f']
print(list1.index(1))
# list.reverse() - 将列表中的元素倒序, 不会产生新列表
list1.reverse()
print(list1)
#补充内置函数 reversed(序列) 将序列中的元素倒序,返回新的迭代器,原序列不会更改
print([i for i in reversed(list1)])
print(list1)
# list.sort() -默认对列表中的元素进行升序排序
#要求列表中的元素一致,且支持比较运算
# 对原列表操作,不会产生新的列表
scores = [10, 100, 89, 20, 67, 34, 9]
scores.sort()
# list.sort(reverse=True) 降序排列
scores.sort(reverse=True)
print(scores)
# list.copy() 产生新的列表。浅拷贝
# 注意:python中变量存储的是数据在内存中的地址
2.元祖
- 什么是元祖
元祖是不可变的列表,作为序列不可变,但是有序(不支持增删改,可以根据下标查找)内部元素要求和列表一样
形式:(元素1, 元素2, 元素3,...) - 查 - 获取元素
- 遍历 数学运算, 比较运算, in\not in len() max() #min() sum()同列表
tuple1 = (1, 2, 3, 4)
print(tuple1[0], tuple1[-1])
# 切片结果是元祖
print(tuple1[0:5:2])
print((1, 2, 3) + ('a', 'b', 'b'))
print((1, 2, 3)*2)
print(100 in (1, 2, 3))
- 元祖专有特性
只有一个元素的元祖 必须在元素后加一个 ‘,’ 否则,会被看做元素本身
tu2 = (2)
tu1 = (2,)
print(type(tu1), type(tu2))
# 表示元祖时,元祖的括号可以省略
tu3 = 10, 20, 'abc'
print(tu3, type(tu3))
# 让变量的个数和元祖中元素的个数保持一致,可以让变量依次取出元祖中的元素
# 必须一致 否则报错
point = (100, 200)
x, y = point
print(x, y)
通过多个变量取获取元祖元素的时候,可以在某个变量前加 星号,将这个变量变成列表,获取不带*变量取完的数据剩下的部分
# 带*变量只能有一个, 并且可以取0个或以上个值,以列表形式赋值
students = ('小明', 30, 10, 175, 70)
name, age, *scores, height, weight = students
print(name, scores)
3.字典
- 什么是字典()
字典是python内置的一个容器型数据类型,可变(支持增删改), 无序(不支持下标操作)
- 形式:{键1:值1, 键2:值2,...} 键:值 键值对
键(key):a.不可变, b.唯一
值(value): 任意数据和列表元素要求相同
注意: 键值对成对出现,字典存储数据,是指存储的是值,键是索引
dict1 = {'a': 10, 'b': 'av', 'c': [1, 2]}
dict2 = {[1]: 10} #报错
print(dict1)
dict3 = {(1, 2): 10}
# 键存在相同时,以最后一个为主
dict1 = {'a': 10, 'b': 'vv', 'c': [1, 2], 'a': 4}
什么时候用字典
如果同时保存的多个数据是具有相同意义的数据,优先列表
如果数据间意义不同,优先使用字典查- 获取字典的值
- 获取key对应的值:字典[key] - 获取字典中指定key对应的值
dog1 = {'name': '大黄', 'type': '中华田园犬', 'color': 'yellow', 'age':3}
print(dog1['type'])
#print(dog1['gender']) #KeyError: 'gender' 不存在的键
# 获取key对应的值
# 字典.get(key) - 获取字典中指定key对应的值
# 字典.get(key, 默认值) - 获取字典中指定key对应的值,如果key不存在,返回指定的默认值
#如果键不存在,则返回None
# None - 关键字,表示数据为空或没有
print(dog1.get('color'))
print(dog1.get('gender'))
- 遍历
# 直接遍历字典拿到的是key 推荐此方法
for x in dog1:
print(x, dog1[x])
# 遍历值,先将值取出放入dict_values() 后遍历值,占内存
for value in dog1.values():
print(value)
#遍历键 占内存
for key in dog1.keys():
print(key)
# 遍历键和值 占内存
for key, value in dog1.items():
print(key, value)
- 增、改 — 添加键值对,修改键值对
- 字典[key] = 值 key不存在时,添加键值对,key存在时,修改值
film = {'name': '流浪地球', '主演': '吴京', 'time': '2019-02-05'}
film['票房'] = '40亿'
print(film)
film['time'] = '2019-02-08'
print(film)
# 字典.setdefault() 给字典的键添加默认值,如果存在,则不处理,不存在则增加键值对
film.setdefault('name', '战狼')
film.setdefault('aba', 'b')
print(film)
- 删
- del 字典[key] - 删除字典中对应的键值对, key不存在会报错
del film['aba']
print(film)
# 字典.pop(key) - 取出字典中key对应的值,结果是key对应的值
print(film.pop('name'))
print(film)
- 相关运算
- 字典不支持数学运算,只支持比较运算符
print({'a': 10, 'b': 20} == {'b': 20, 'a': 10})
# in \ not in
# key in 字典 - 判断字典中是否存在某个key
student = {'name': '小明', 'age': 20, 'tel': '24323536'}
print('小明' in student)
print('name' in student)
- len(), max(), min()
max min 比较的是key - dict() 将其他类型转化为字典
序列中的元素为 只有两个元素的序列,
对应key的元素需满足成为key的条件字典 - 字典转列表、元祖的时候,是将字典的key取出作为列表、元祖的元素
- 相关方法
dict.clear() -清空字典
dict.copy() -复制字典的内容,产生新的字典
dict.fromkeys(序列,值) -创建一个新的字典,将序列中的元素作为新字典的key,指定的值作为每一个key的值
dict11 = dict.fromkeys(student, 10)
print(dict11)
字典1.update(字典2) - 用字典2的键值对更新字典1,
字典1 不存在则增加, 存在则更改
- 注意:字典作为序列直接取出的的都是键