python基础:列表推导式、字典推导式、集合推导式
一、列表推导式
列表推导式(list comprehension)是利用其它列表创建新列表的一种方式,
工作原理类似for循环,即可对得到的元素进行转换或者筛选。
列表推导式的基本格式:
变量名=[表达式 for 变量 in 列表] 或者
变量名= [表达式 for 变量 in 列表 if 条件]
执行流程:
遍历出列表中的内容给变量,表达式根据变量值进行逻辑运算。
或者遍历列表中的内容给变量,然后进行判断,符合的值在给表达式。
练习1、将lst列表中每一个元素进行平方后放到一个新的列表
第一种方法
lst = [1, 2, 3, 4, 5, 6, 7]
new_lst = []
for i in lst:
num = i * i
new_lst.append(num)
print(new_lst) # [1, 4, 9, 16, 25, 36, 49]
# 第二种方法:使用列表推导式:
new_lst = [i * i for i in lst]
print(new_lst) #[1, 4, 9, 16, 25, 36, 49]
new_lst=[i**2 for i in lst]
print(new_lst) #[1, 4, 9, 16, 25, 36, 49]
# 第三种方法:使用函数表达式
def square(num):
return num*num
new_lst=[square(i) for i in lst]
print(new_lst) #[1, 4, 9, 16, 25, 36, 49]
2、找出列表中的奇数并以列表形式展示出来
lst = [1, 2, 3, 4, 5, 6, 7, 8]
# 普通方式
new_lst = []
for i in lst:
if i % 2 == 1:
new_lst.append(i)
print(new_lst) #[1, 3, 5, 7]
# 使用列表推导式
new_lst = [i for i in lst if i % 2 == 1]
print(new_lst) #[1, 3, 5, 7]
3、求列表中所有大于2的偶数进行平方计算
lst = [1, 2, 3, 4, 5, 6, 7, 8]
# 普通方式
new_lst = []
for i in lst:
if i > 2 and i % 2 == 0:
num = i * i
new_lst.append(num)
print(new_lst) #[16, 36, 64]
# 使用列表推导式:
new_lst = [i * i for i in lst if i > 2 and i % 2 == 0]
print(new_lst) #[16, 36, 64]
4、将一个嵌套列表转化为一个一维空列表
lst=[[1,2,3],[4,5,6],[7,8,9]]
new_lst=[]
for lst1 in lst:
for i in lst1:
new_lst.append(i)
print(new_lst) #[1, 2, 3, 4, 5, 6, 7, 8, 9]
# 列表推导式
new_lst=[i for lst1 in lst for i in lst1]
print(new_lst) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
5:现在有一列表lst = [[1,2,3],[4,5,6],[7,8,9]]要求出1/4/7 和 1/5/9 元素,思考如何取出
lst=[[1,2,3],[4,5,6],[7,8,9]]
# 普通方式 取1,4,7
new_lst=[]
for i in range(len(lst)):
ret=lst[i][0]
new_lst.append(ret)
print(new_lst) #[1, 4, 7]
# 列表推导式:
new_lst=[lst[i][0] for i in range(len(lst))]
print(new_lst) #[1, 4, 7]
# 取1,5,9
lst=[[1,2,3],[4,5,6],[7,8,9]]
new_lst=[]
for i in range(len(lst)):
ret=lst[i][i]
new_lst.append(ret)
print(new_lst) #[1, 5, 9]
# 列表推导式
new_lst=[lst[i][i] for i in range(len(lst))]
print(new_lst) #[1, 5, 9]
二、字典推导式
字典推导式是该思想的延续,语法差不多,只不过产生的是字典而已。
字典推导式格式:
变量名={表达式 for 临时变量 in 可迭代内容}
练习1: 将字典中的key和value 进行对换。
dic = {'k1': 20, 'k2': 30}
# 变为dic={20:'k1',30,'k2'}
# 普通方式
new_dic = {}
for i in dic:
value = dic[i]
new_dic[value] = i
print(new_dic) #{20: 'k1', 30: 'k2'}
#字典items()用法:
for key, value in dic.items():
new_dic[value] = key
print(new_dic) #{20: 'k1', 30: 'k2'}
# 字典推导式:
new_dic = {value: key for key, value in dic.items()}
print(new_dic) #{20: 'k1', 30: 'k2'}
三、集合推导式
集合推导式跟列表推导式非常相似,唯一区别在于用{}代替[]
练习1:计算列表中每个值的平方,自带去重功能
squared = {x**2 for x in [1, -1, 2]}
print(squared) #{1, 4}
lst=[-2,3,-3,5]
set1={i*i for i in lst}
print(set1) #{9, 4, 25}
还没有评论,来说两句吧...