第3章 列表、元组、字典##
Python的序列
- 创建列表:my_list = [, , , ];创建元祖:my_tuple = (, , ,)
- 索引:a_list/tuple[0]
列表和元组的通用用法
- 子序列(slice): [start : end : step] start在end的左边
- 加法:只能同类型相加 e.g. sum_tuple = a_tuple + b_tuple
- 乘法:mul_tuple = a_tuple * 4
order_endings = (‘st’,‘nd’,‘rd’,) + (‘th’,) * 17 + (‘st’,‘nd’,‘rd’,) + (‘th’,) * 7 + (‘st’,)
day = input(“输入日期(1-31):”)
day_int = int(day)
print(day + order_endings[day_int - 1])
- in操作符:20 in a_tuple
- 长度、最大值、最小值: len(), max(), min()
- 序列封包和解包:封包 e.g. vals = 10,20,30
解包 e.g. a_tuple = tuple(range(1,10,2))
a,b,c,d,e = a_tuple
- 同时多值赋给多个变量:x,y,z = 10,20,30
- 交换变量的值:x,y,z = y,z,x
- 部分解出变量:first,second,*rest = range(10) # 0, 1, [2…9]
使用列表
- 创建列表 list(tuple or range)
- 创建元组 tuple(list or range)
- 增加列表元素 list.append() 在列表末尾添加元素,将加入的列表或元组当做一个元素;list.extend() 在列表末尾添加元素,将加入的列表或元组拆分成单个元素。
- 在中间插入元素 list.insert(index,‘a’), 若插入的为列表或元组则当成被拆分成多个字母的一个元素。
- 删除列表元素 del语句 del list[0];也可删除变量 del name
remove()方法 list.remove(‘a’) #删除第一次找到的’a’; clear()方法 list.clear(),清空列表中所有元素。
- 修改列表元素 对列表元素赋值相当于修改列表元素。
b_list = list(range(1,5))
print(b_list)
b_list[1:3] = [‘a’,‘b’]
print(b_list) #[1,‘a’,‘b’,4]
对列表中空的slice赋值,就相当于插入元素
b_list[2:2] = [‘x’,‘y’]
赋空值相当于删除元素
b_list[2,5] = []
用slice语法赋值时,不能使用单个值,否则该值会被当做序列处理,其中每一个字符变为一个元素
b_list[1:3] = ‘Charlie’
print(b_list) # [1,‘C’,‘h’…]
若指定了step,则被赋值元素个数与赋值列表元素个数相等
c_list = list(range(1,10))
c_list[2:9:2] = [‘a’,‘b’,‘c’,‘d’]
- 列表的其他方法
dir(list) 查看列表包含的所有方法
count() 统计列表中某个元素出现次数 list.count(‘a’)
index() 判断某个元素在列表中出现的第一个位置 list.index(30);list.index(30,start,end)
pop() 将列表当成“栈”用,实现元素出栈。
stack = []
stack.append(‘a’)
stack.append(‘b’)
stack.append(‘c’)
print(stack.pop()) # 将最后入栈的元素移出栈,返回出栈的元素
print(stack) #[‘a’,‘b’]
reverse 将列表中元素反向存放 list.reverse()
sort 元素排序 list.sort()
传入key和reverse参数进行排序:
#按照字符串长短进行排序
b_list.sort(key=len)
b_list.sort(key=len,reverse=True)
使用集合
{}生成集合,集合中不含相同元素:
使用字典
- dict中的key必须不可变(可用元组作为key,不能用列表),且唯一。
- 创建字典:scores = {‘语文’:83,‘数学’:95,‘英语’:95}
vegetables = [(‘celery’,1.58),(‘brocoli’,1.29)]
dict1 = dict(vegetables)
或者将元组换为列表
使用关键字参数创建字典,此时可用省略引号。
dict2 = dict(spinach = 1.39, cabbage = 2.59)
- 字典的基本用法:通过key访问value,添加key-value对,删除key-value对,修改key-value对,判断指定key-value对是否存在。
scores[‘语文’]
对不存在的key赋值,就是增加key-value对
scores[‘政治’] = 96
使用del语句删除key-value对
del scores[‘语文’]
对已存在的key赋值,会覆盖原有的value
scores[‘政治’] = 94
使用in 或not in判断字典是否包含指定的key
print(‘AUDI’ in cars) #True
字典的常用方法
==dir(dict)==查看字典包含哪些方法
dict.clear() 清空字典
dict.get() 根据key获取value,当用[]访问不存在的key时,字典会报错;但用get()访问时,只会返回None。
dict.update() 使用一个字典更新原来字典,若被更新字典已包含对应的key-value对,则原value会被覆盖,若不包含,则该key-value对被添加进去。
dict.items(),dict.keys(),dict.values() 分别获取字典中所有key-value对,key,value。依次返回dict_items,dict_keys,dict_values对象,Python不希望用户直接操作这几个方法,但可通过list()函数将其转换为列表。
cars = {‘BMW’:8.5,‘BENS’:8.3,‘AUDI’:7.9}
ims = cars.items()
print(list(ims)) #[(‘BMW’, 8.5), (‘BENS’, 8.3), (‘AUDI’, 7.9)] 输出一个由元组组成的字典
print(list(ims)[1])
kys = cars.keys()
print(list(kys))
==dict.pop()==获取指定key对应的value,并删除这个key-value对。
print(cars.pop(‘AUDI’))
dict.popitem() 随机弹出字典的一个key-value对。(其实是最后一个key-value对,但由于dict中key-value对的顺序是不可知的,因此感觉是随机弹出的)
print(cars.popitem()) #弹出的是一个元组:(‘AUDI’,7.9)
对序列解包可以用两个变量接收key和value。
k,v = cars.popitem()
print(k,v) # BENS 8.3
==dict.setdefault()==根据key获取对应的value值,若key在字典中不存在,则为这个不存在的key设置一个默认的value,再返回该key对应的value值。
print(cars.setdefault(‘PORSCHE’,9.2))
print(cars)
9.2
{‘BMW’: 8.5, ‘BENS’: 8.3, ‘AUDI’: 7.9, ‘PORSCHE’: 9.2}
fromkeys() 使用给定的多个key创建字典,这些key对应的value都是None,也可以用额外的参数作为默认的value
a_dict = dict.fromkeys([‘a’,‘b’])
print(a_dict) #{‘a’: None, ‘b’: None}
c_dict = dict.fromkeys([‘a’,‘b’],‘good’)
{‘a’: ‘good’, ‘b’: ‘good’}
使用字典格式化字符串
temp = ‘书名是:%(name)s,价格是:%(price)010.2f,出版社是:%(publish)s’
book = {‘name’:‘疯狂Python讲义’,‘price’:88.9,‘publish’:‘电子社’}
print(temp % book)
#书名是:疯狂Python讲义,价格是:0000088.90,出版社是:电子社
字符串、列表、集合、元组、字典相互转换
https://www.cnblogs.com/egrep/articles/8687169.html
课后习题