推导式知识点及异常简介

推导式

一、列表推导式
列表推导式是利用其它列表创建新列表的一种方式,工作原理类似for循环,即可对得到的元素进行转换或者筛选。
基本格式:
变量名=[表达式 for 变量 in 列表] 或者 变量名= [表达式 for 变量 in 列表 if 条件]
执行流程:
遍历出列表中的每一个元素给临时变量,表达式根据变量值进行逻辑判断,最后将新的数据放到新的列表中。
例1、求列表中数的平方,添加到新列表

lst=[1,2,3,4,5,6,7]
lst1=[]
for i in lst:
    num=i*i
    lst1.append(num)
print(lst1)

利用列表推导式

lst=[1,2,3,4,5,6,7]
lst1=[i*i for i in lst]
print(lst1)

例2、求奇数添加到新列表

lst1=[]
lst=[1,2,3,4,5,6,7]
for i in lst:
    if i%2==1:
        lst1.append(i)
print(lst1)

利用列表推导式

lst=[1,2,3,4,5,6,7]
lst1=[i for i in lst if i%2==1]
print(lst1)

例3、求列表中所有大于2的偶数进行平方计算

lst = [1, 2, 3, 4, 5, 6, 7, 8]
new_lst = [i ** 2 for i in lst if i % 2 == 0 if i > 2]
print(new_lst) # [16, 36, 64]

例4、将一个嵌套列表转换成一个一维列表。lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
转换成:lst2=[1, 2, 3, 4, 5, 6, 7, 8, 9]

lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new_lst = [i for lst1 in lst for i in lst1]
print(new_lst)

例5、现在有一列表lst = [[1,2,3],[4,5,6],[7,8,9]]要求出1/4/7 和 1/5/9 元素,思考如何取出

lst1 = [lst[i][0] for i in range(len(lst))]
print(lst1)

lst2 = [lst[i][i] for i in range(len(lst))]
print(lst2)

二、字典推导式
字典推导式是该思想的延续,语法差不多,只不过产生的是字典而已。
字典推导式格式:
变量名={表达式 for 临时变量 字典#可迭代内容}
例1、将字典中的key和value 进行对换。

正常方法

dic={'k1':10,'k2':20}
new_dic={}
for key,value in dic.items():
    new_dic[value]=key
print(new_dic)

字典推导式

dic={'k1':10,'k2':20}
new_dic={value:key for key,value in dic.items()}
 print(new_dic)

三、集合推导式
集合推导式跟列表推导式非常相似,唯一区别在于用{}代替[]
例1、计算列表中每个值的平方,自带去重功能

set={1,2,-2,3,5,-5}
new_set={i**2 for i in set }
print(new_set)

异常简介

异常是指在语法正确的前提下,程序运行时报错就是异常。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
一、捕获异常
1、基本语法
try:
…代码1…
…代码2…
…代码3…
except 异常类型:
#try中一旦检测到异常,就执行这个位置的逻辑
2、执行流程:
先执行try中的代码,如果代码2报错,则不会执行代码3,执行执行except中的异常代码。
例1、
try:
print(‘程序开始了。。。’)
print(1 / 0)
print(‘程序结束了。。。’)
except ZeroDivisionError:#此处异常如果与抛出的异常不同,则程序还会报错。
print(‘除数为零了’)

print('程序结束了。。。')

3、注意事项
抛出的异常和捕获的异常必须一致才起作用,否则程序还是会报错。
4、except捕获多个异常
异常捕获流程: 依次捕获依次,直到捕获到对应的异常。
(1)多分支结构格式:
try:
执行的代码…
except 异常类型:
捕获异常1
except 异常类型 :
捕获异常2
except 异常类型:
捕获异常3

try:
    print('start...')
    lst=[12,3]
    print(1/0)
    print(lst[2])
    print('end...')
except ZeroDivisionError:
    print('除数为零了。。。')
except IndexError:
    print('索引越界了。。。')

(2)元组形式结构:
try:
执行的代码…
except(异常类型1,异常类型2,异常类型3):
捕获异常…

try:
    print('start...')
    lst=[12,3]
    print(1/0)
    print(lst[2])
    print('end...')
except (ZeroDivisionError,IndexError):
    print('程序出错了。。。')

猜你喜欢

转载自blog.csdn.net/qq_44240254/article/details/86021885