Python推导式

推导式

又称解析式,利用列表推导式、字典推导式、集合推导式可以从一个数据对象勾见另一个新的数据对象。

列表推导式

对可迭代对象的元素进行遍历、过滤或再次运算,生成满足条件的新列表。

结构:[func/expression for value1 in iterable1 if condition1 for value2 in iterable2 if condition2 … for valueN in iterableN if conditionN]
注:列表推导式中可以使用函数
示例:

#循环语句
n = [1,2,3]
number = []
for i in n:
    number.append(i*2)
print(number)
#列表推导式
number2 = [i*2 for i in n]
print(number2)

运行结果:
在这里插入图片描述

#循环语句
n = [[1,2,3],[4,5,6]]
number = []
for i in n:
    for j in i:
        number.append(j*2)
print(number)
#列表推导式
number2 = [j*2 for i in n for j in i]
print(number2)

运行结果:
在这里插入图片描述

  1. 带条件判断的情况
#循环语句
n = [-3,-2,-1,0,1,2,3]
number = []
for i in n:
    if i>0:
        number.append(i)
print(number)
#列表推导式
number2 = [i for i in n if i>0]
print(number2)

运行结果:
在这里插入图片描述

  1. 带有else的情况
#循环语句
n = [-3,-2,-1,0,1,2,3]
number = []
for i in n:
    if i>0:
        number.append(i)
    else:
        number.append(i*2)
print(number)
#列表推导式
number2 = [i if i>0 else i*2 for i in n ]
print(number2)

运行结果:
在这里插入图片描述

  1. 同时遍历多个列表或可迭代对象
#循环语句
n = [1,2,3]
c = ['a','b','c']
nc = []
for i in n:
    for j in c:
        nc.append((i,j))
print(nc)
#列表推导式
nc2 = [(i,j) for i in n for j in c]
print(nc2)

运行结果:
在这里插入图片描述

字典推导式

字典推导式和列表推导式的使用方法类似,需要将方括号变成花括号,并且需要两个表达式,一个生成键,一个生成值,两个表达式之间使用冒号分隔,最后生成的是字典。

在此只举一个简单的例子

#循环语句
name= ['Bob','Tom','Alice','Jerry','Wendy','Smith']
score=[86,78,98,90,47,80]
ns = {}
for i,j in zip(name,score):
    ns[i] = j
print(ns)
#字典推导式
dd={i:j for i,j in zip(name,score)}
print(dd)

运行结果:
在这里插入图片描述

集合推导式

跟列表推导式类似,将方括号变成花括号即可,最后生成的是集合。
集合推导式和列表推导式的不同点:

list = [i*2 for i in (1,2,3,4,2,1,4)]
print(list)
set = {i*2 for i in (1,2,3,4,2,1,4)}
print(set)

运行结果:
在这里插入图片描述
从本例中可以看出,两者的区别在于是否去重(集合推导式会进行去重,并且不重复的排在前面)

生成器推导式

与列表推导式类似,方括号改成圆括号,与列表推导式最大的区别在于生成器推导式的结果是一个生成器对象(一种迭代器,可以转化为列表或元组),不支持用下标访问元素,已访问过的也不支持再次访问。
生成器对象可以通过for循环或者__next__()方法、next()函数进行遍历,也可以转换为列表或元组,但是不支持使用下标访问元素,已经访问过的元素也不支持再次访问。当所有元素访问结束之后,如果想再次访问就必须重新创建该生成器对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值