09--列表、元组、字典
一、列表
1、定义列表
l = list() l1 = [] # 定义空的列表的两种方式
2、类型转换
但凡能够被for循环的对象,都可以当做参数传给list(),转成列表
a = 'name' l = list(a) # 底层相当于调用for循环,将每个数据存到列表中 print(l) # 默认是把字典的key转成列表 l = list({'k1':'name','k2':'age'}) print(l)
3、优先掌握的操作
3.1 按照索引取值(正向取反向取)
list1 = ['a',1,'b','2'] # 1按索引取值:既可以取值也可以改 print(list1[0]) print(list1[-1]) # 索引存在则修改对应值,索引不存在,则会报错 list1[0] = 'c' print(list1)
3.2 切片:索引的扩展操作
list1 = ['a',1,'b','2'] print(list1[::-1]) # 相当于拷贝操作,浅拷贝
3.3 长度len()
list1 = ['a',1,'b','2'] print(len(list1))
3.3 成员运算
list1 = ['a',1,'b','2'] print('a' in list1) print('a' not in list1)
3.4 添加
3.4.1 追加 .append()
list1 = ['a',1,'b','2'] list1.append(3) print(list1)
3.4.2 扩展 .extend(),将可迭代对象的每一个元素追加到列表中
list1 = ['a',1,'b','2'] list2 = [1,2,3] # for i in list2: # list1.append(i) # print(list1) # 实现上述代码操作 list1.extend(list2) print(list1)
list1 = ['a',1,'b','2'] list1.insert(1,'egon') print(list1)
3.5 删除
3.5.1 del 删除
del,通用的的删除方法,可以删除切片,没有返回值,只是单纯的删除 list1 = ['a',1,'b','2'] del list1[0] del list1
3.5.2 pop(),根据索引删除,会返回删除的元素,默认删除最后一个值
list1 = ['a',1,'b','2'] res = list1.pop(2) print(res) print(list1)
3.5.3 remove(),根据元素值删除元素,没有返回值
list1 = ['a',1,'b','2'] res= list1.remove('a') print(list1) print(res) # None
3.6 reverse():颠倒列表顺序
list1 = ['a',1,'b','2'] print(list1.reverse()) # 注意,这个没有排序的功能
3.7 sort() 给列表排序
list2 = [1,2,4,6,2,3] print(list2.sort()) # 数字默认从小到大排 print(list2.sort(reverse=True)) # 从打到小排 # 了解:字符串可以比大小,按照ASCII码表的先后顺序区别字符的大小 # 比较字符串大小按照对应位置依次比大小 # 在ASCII中表中越靠后的字符大于前面的 # 了解:列表之间也可以比大小,按照对应位置进行比大小,如果对应位置数据类型不同,会报错 l = [1,'abc','z'] l1 = [10,] print(l1 > l )
3.8 循环:遍历列表
list1 = ['a',1,'b','2'] for i in list1: print(i)
4、需要掌握的操作
4.1 count():计算列表中某个元素的个数
list1 = ['a',1,'b','2'] # 某个元素的个数 print(list1.count(1))
4.2index(),按照值找对应的索引
list1 = ['a',1,'b','2'] print(list1.index(1))
4.3 .copy():浅拷贝
list1 = ['a',1,'b','2'] list2 = list1.copy()
4.4 clear(),清空列表
list1 = ['a',1,'b','2'] list1.clear() print(list1)
4.5 队列和堆栈
# 队列:first in,first out(FIFO,先进先出) l = [] # 入队操作 l.append('first') l.append('second') l.append('third') # 出队操作 print(l.pop(0)) print(l.pop(0)) print(l.pop(0)) # 堆栈 (last in first out LIFO) l.append('first') l.append('second') l.append('third') # 出队操作 print(l.pop()) print(l.pop()) print(l.pop())
二、元组:也被称为只读列表
1、定义元组:按照位置存放多个值,只能读不能取
t=(1,1.3,'aa')
2、类型转换:与列表相同
print(tuple('hello')) print(tuple([1,2,3])) print(tuple({'a1':111,'a2':333}))
3、优先掌握的操作
3.1 按索引取值:正向、反向,同列表操作
t=('aa','bbb','cc') print(t[0]) print(t[-1])
3.2 切片:顾头不顾尾
t=('aa','bbb','cc','dd','eee') print(t[0:3]) print(t[::-1])
3.3 len()
t=('aa','bbb','cc','dd','eee') print(len(t))
3.4 成员运算 in not in
print('aa' in t)
3.5 循环遍历:与列表相同
3.6 count():与列表的count相同
三、字典
1、定义:{}内用逗号分隔开多个key:value,其中value可以是任意类型的值,key必须是不可变类型,一般是对value具有描述性质的字符串,而且key不能重复
2、创建空字典的方式
2.1 方式一
dic = {'k':'v','k1':'v1'}
2.2 方式二-创建空字典的方式
d = {}
d1 = dict()
2.3 方式三
d = dict{x=12,y=2}
2.4 方式四,列表转为字典,前提是列表中必须只有两个值
info=[ ['name','egon'], ('age',18), ['gender','male'] ] d = {} for k,v in info: # 解压赋值 k,v = items d[k] = v print(d)
2.5 方式五:一行代码搞定方式四
d = dict(info)
2.6 方式六:快速初始化一个字典
keys=['name','age','gender'] d = {} for key in keys: d[key] = None print(d) # 一行代码搞定上述操作 d1 = {}.fromkeys(keys,None) print(d1)
3、优先掌握的操作
3.1 按key存取值,可存可取
d={'k1':111} #针对赋值操作:key存在,则修改 d['k1']=222 #针对赋值操作:key不存在,则创建新值 d['k2']=3333 print(d)
3.2 len():键值对的个数,当有key重复的时候,只记一次
d={'k1':111,'k2':2222,'k1':3333,'k1':4444} print(d) print(len(d))
3.3 in 和 not in :根据key
d={'k1':111,'k2':2222} print('k1' in d) print(111 in d)
3.4 删除操作
3.4.1 del 通用删除
d={'k1':111,'k2':2222} del d['k1'] print(d)
3.4.2 pop,根据key删除元素,会返回key对应的value
d={'k1':111,'k2':2222}
res=d.pop('k2') print(d) print(res)
3.4.3 popitem随机删除一组键值对,将被删除的键值对以元组的方式返回
d={'k1':111,'k2':2222} res=d.popitem() print(d) print(res)
3.5 key(). value().items()在python3中得到的是一只老母鸡
# 在python2中 >>> d={'k1':111,'k2':2222} >>> >>> d.keys() ['k2', 'k1'] >>> d.values() [2222, 111] >>> d.items() [('k2', 2222), ('k1', 111)] >>> dict(d.items()) {'k2': 2222, 'k1': 111} >>>
# 在python3中 >>> d = {'name':'egon','age':12} >>> d.keys() dict_keys(['name', 'age']) >>> d.values() dict_values(['egon', 12]) >>> d.items() dict_items([('name', 'egon'), ('age', 12)]) >>>
3.6for循环遍历
# 遍历key for k in d.keys(): print(k) for k in d: print(k)
# 遍历value for v in d.values(): print(v)
# 遍历键值对 for k,v in d.items(): print(k,v)
# 将遍历结果转成列表 print(list(d.keys())) print(list(d.values())) print(list(d.items()))
4、需要掌握的内置方法
4.1 clear 清空字典
4.2 update():更新字典,存在的键值对进行覆盖,不存在的进行添加
d={'k1':111} d.update({'k2':222,'k3':333,'k1':111111111111111}) print(d)
4.3 .get()根据key取值,容错性高,弥补当key不存在时,报错的问题
d = {'a':'gg','k':21} # 弥补当key不存在时会报错的问题,不会报错,会返回None print(d['k3']) # 会报错 d.get('k3') # 会返回none,容错性好
4.4 setdefault:如果key存在,且value也相同,原列表不发生任何变化,如果value与原列表不同,原列表的value也不会变化。key不存在,添加键值对。
有返回值,返回值是setdefault执行完毕后,字典中key对应的value
d = {'name':'egon','age':18} res = d.setdefault('name' ,'male') print(res) # if 'sex' in d: # ... # 等同于pass # else: # d['sex'] = 'male'