3.3.3列表的嵌套
一个列表中的元素又是一个链表,这就是列表的嵌套
3.3.4列表推导式
列表推导式(列表生成式):用一个表达式创建一个有规律的列表或控制一个有规律的列表
例子:
(1)# 需求列表 0 -20
# list1 = list(range(0, 21))
# print(list1)
# while 准备一个空列表,(i<21)然后range生成等差数列 把数字追加到空列表
# list2 = []
# i = 0
# while i<21:
# list2.append(i)
# i += 1
# print(list2)
# list3 = []
# for i in range(0, 21):
# list3.append(i)
# print(list3)
# list4 = [i for i in range(0, 21)]
# print(list4)
(2)# 取0-20之间的偶数
# list5 = []
# for i in range(0, 21, 2):
# list5.append(i)
# print(list5)
# list6 = []
# for i in range(0,21):
# if i % 2 == 0:
# list6.append(i)
# print(list6)
# list7 = [i for i in range(0,21, 2)]
# print(list7)
# list8 = [i for i in range(0, 21) if i % 2 == 0]
# print(list8)
# 生成10 个 666 列表
# list9 = ['aaa' for _ in range(10)]
# 因为返回的数据和i没有任何关系,所以把i替换成 _
# print(list9)
#mylist = ['daqiu', 10,'erqiu', 20, 'qiu', 'sanqiu']
# 循环遍历迭代:要字符长度>=3
# len(str(i))
#list10 = [i for i in mylist if len(str(i)) >= 3]
#print(list10)
3.3.5列表常用技巧
(1)合并列表
①方法一:+
list3 = list1 + list2
②方法二:+=
list1 += list2
③方法三:extend
list1.extend(list2)
(2)字符串与列表间的互转
①字符串转列表
字符串名.split(“分割符号”)
注意:当split的小括号里面什么都不写的时候,只要是空格或者\t都会被去掉
②列表转字符串☆☆☆
"分割符号".join(列表名)
注意:当有混合类型时,用列表推导式:
# list4 = [1, 2, 3, 'abc', 'bcd']
# list5 = [str(i) for i in list4]
# print(list5)
# str5 = '_'.join(list5)
# print(str5)
(3)判断某个数据是不是某个数据类型☆☆☆
isinstance(数据,类型)
(4)enumerate☆☆☆
返回一个列表,列表里面包含的是下标和数据对应的元组。利用enumerate拆包,数据更加可控
例子:
mylist = ['aa', 'bb', 'cc']
for i in enumerate(mylist):
print(i)
print(list(enumerate(mylist)))
# print(id(mylist)) # id() 查看任何一个数据的内存地址
for key,value in enumerate(mylist):
print(key)
print(value)
3.4字典
3.4.1字典的使用和创建
(1)创建空字典
①手动创建:dict1{}
②用函数(方法):dict1 = dict()
(2)创建有数据的字典
①键值对,各键值对之间用逗号隔开
如:dict2 = {'name': 'python', 'age': 28}
② 用函数(方法):dict()
如:dict4 = dict(name='aa', age=18)
经典例子:
dict5 = dict([('one',1),('two',2)])
print(dict5)
dict6 = {}
dict7 = dict6.fromkeys(['aa', 'bb', 'cc'], 10)
#当字典的所有键的取值均是相同值时用fromkeys
print(dict7)
(3)取数据
字典不支持下标,也就是说是无序的。字典通过键名取数据。
如:print(dict2['name'])
3.4.2字典_修改、增加和查找
(1)查找
① 字典通过键名查找数据,如果等号赋值,如果有这个键,则修改值;如果没有,则新增这个键值对。如果仅查找键名,键名不存在时报错
②get()
通过键名查找数据,如果有这个键,则返回对应的值;如果没有,默认返回None;
注意:如果get设置了第二个参数,如果没有这个键,则返回第二个参数(给自己一个提示)
③setdefault()
通过键名查找数据,如果有这个键,则返回对应的值,如果没有默认返回None,同时会在字典中新增这个键值对,新增的键值对的key是查找的那个键名,value是None
注意:如果setdefault设置了第二个参数,如果没有这个键,则返回第二个参数,同时默认新增键值对。键名:第二个参数
(2)增加:update()既能修改又能新增
语法:字典名1.update(字典名2) #用2去更新1
如:
dict1 = {'name': 'python','age':28}
dict2 = {'name': 'gui', 'sex': 'man'}
print(dict2)
# 用2去更新1:既能修改又能新增
dict1.update(dict2)
print(dict1)
3.4.3字典_拷贝
(1)浅拷贝:赋值型拷贝
(2)深拷贝:copy()
(3)copy模块做拷贝
import copy
dict2 = copy.deepcopy(dict1)
注意:这种方式的好处是复杂数据,添加的时候不影响彼此