Python遗漏知识点二
第三章 列表元组和字典
Python的常见序列类型包括字符串、列表和元组。
python提供了len()、man()、min()全局函数来获取元组列表或者字符串的长度、最大值和最小值。
Python还提供了序列封包和序列解包:
程序把多个值赋值给一个变量的时候,Python会自动讲多个值封装成元组。
python允许将序列(字符串、列表、元组)直接赋值给多个变量,此时序列的各元素会被依次赋值给每个变量(要求序列的元素个数个变量个数相等)
x, y, z = y, z, x
first, *middle, last = range(10)
创建列表:
- 使用中括号创建
- list()函数可以讲元组、区间、字符串等对象转换成为列表
创建元组: - 使用()创建
- 使用tuple()函数可以将列表、区间(range)、字符串等对象转换为元组
增加列表元素:
- append()函数,将整个添加的元素作为整体添加
- extend()函数,将列表、元组解包添加到原来的列表中
- insert()函数,两个参数(位置,插入元素),在指定位置将元素整体插入
删除列表元素:
-
del
-
remove()函数
c_list = [1,2,3,4,5,6,3]
c_list.remove(3) # 删除第一次找到的元素
c_list.remove(20) # 找不到元素返回ValueError错误 -
clear()函数清空列表,[]
修改列表元素:
-
直接使用索引下标修改
-
通过slice语法对列表其中一部分赋值,在执行这个操作时并不要求新赋值的元素个数与原来的元素个数相等
b_list = list(range(0, 5))
b_list[2: 2] = [‘x’, ‘y’] #插入
b_list[2:5] = [ ] # 删除
对列表使用slice语法赋值的时候不能使用单个值;如果使用字符串赋值,python会自动吧字符串当成序列处理,其中每个字符都是一个元素。会把字符串拆开放入
b_list[1:3] = ‘charlie’
使用slice语法赋值时,可以指定step参数。但如果指定了step参数,则要求所赋值的列表元素与所替换的列表元素个数相等。c _lsit = list(range(1,10))
c_list[2:9:2] = [‘a’,‘b’,‘c’,‘d’] # 使用step之后被复制的元素有四个,因此用于赋值的列表也必须是4个元素
其它函数:
count():统计列表中元素出现的次数
index():用于判断某个元素在列表中出现位置
a_list.index(30, 2) # 从索引2开始,定位元素30出现的位置
a_list.index(30, 2, 4) #在索引2到4之间定位元素30出现的位置,找不到就ValueError
pop():实现出栈功能
reverse():用于将列表中元素方向存放
sort():用于列表的排序
# sort()函数还可以传入key和reverse两个参数,而且必须通过**关键字参数**传递。
#key用于为每个元素生成一个比较大小的键;reverse参数用于执行是否需要反转排序,默认为False
b_list.sort(key = len, reverse = True)
# 注意和sorted()函数区别
创建字典:
-
大括号创建
-
dict()函数
dict1 = (vegetables)
dict2 = (‘语文’=99,‘数学’=98)
字典的增删改查:
增加:直接使用索引添加
删除:del
修改:使用索引下标修改
查询:in
列表不允许对不存在的索引赋值,字典允许直接对不存在的key赋值
字典常用方法:
-
get()方法,通过key获取value。使用索引获取value值,不存在会引发KeyError;但是使用get()不存在会返回None
-
update():可以对字典进行覆盖修改或者添加
-
items()、keys()、values():分别获得字典的key-value、所有key、所有value。这三个方法返回的是dict_items、dict_keys、dict_values对象,Python不希望用户直接使用这几个方法,但是可以通过list()方法把他们转化成列表
-
pop()方法:用于获取指定的key对应的value,并且删除这个key-value对。
-
popitem()方法:会随机弹出字典的一个key-value对,类型是元组
setdefault()方法:根据key获取value;找不到则得到设定的默认值,并且把这个默认的键值对加入字典cars = setdefault(‘PORSCHE’, 92) # 找到则返回对应value;找不到则返回92,并且加入字典
使用字典格式化字符串:
temp = '书名是:%(name)s, 价格是:%(price)010.2f, 出版社是:%(publish)s'
book = {'name': 'python讲义', 'price': 31.2, 'publish': '人民出版社'}
print(temp % book )
第四章 流程控制
断言:
与if有点类似,它用于对一个bool表达式进行断言,如果为True继续向下执行,如果为False程序会引发AssertionError错误
s_age = int(input('请输入年龄:'))
assert 20<a_age<80
print('你输入的年龄在20-80之间')
isinstance()函数用来判断某个变量是否为指定类型的实例,前一个参数为要判断的变量,后一个参数为类型。
isinstance(2, int)
Python允许循环后面跟一个else代码块,如果循环正常完成循环会执行else代码块,如果break终止循环则不能执行else
count_i = 5
while count_i <5:
print(cout_i)
count += 1
else:
print('count_i大于或者等于5', count_i)
for 条件:
pass
else:
pass
for表达式
[表达式 for 循环计数器 in 可迭代对象]
for表达式最终返回的是列表,因此for表达式也成为列表推导式
a_range = range(10)
a_list = [x*x for x in a_range if x % 2 == 0]
print(a_list)
如果将for表达式的方括号改为圆括号,for表达式将不再生成列表,而是生成一个生成器(generator),该生成器同样可以使用for循环迭代
a_range = range(10)
c_generator = (x*x for x in a_range if x % 2 ==0)
for i in c_generator:
print(i,end = '\t')
print()
# 迭代20次
d_list = [(x, y) for x in range(5) for y in range(4)]
print(d_list)
常用工具函数:
-
zip():可以将两个列表压缩成为一个zip对象(可迭代对象)
a = ['a', 'b', 'c', 'd'] b = [1, 2, 3] [x for x in zip(a,b)]
-
reversed()函数:可以接收各种序列(元组、列表、区间等)参数,然后返回一个反序列的迭代器,该函数对参数本身并不产生影响。
# 产生一个迭代器对象需要使用循环来访问
[x for x in reversed(range(4))] -
sorted()函数:可以接受一个可迭代对象作为参数,返回一个对元素排列的列表;还可以传入一个reverse反向排序,传入key来指定排序的关键值。
b = ['asdf', 'ansdf', 'dqweqwr', '123', 'bdweqweqwr'] sorted(b, key = len , reverse = True)