python中的推导式是一种独特的数据处理方式,可以从一个数据序列去构建另一个新的数据序列的结构体。
它包括以下推导式:
- 列表(list)推导式
- 字典(dict)推导式
- 集合(set)推导式
- 元组(tuple)推导式
列表(list)推导式
列表推导式的一般格式为:
[表达式1 for 变量名 in 列表名]
或者对推导式结果进行筛选
[表达式1 for 变量名 in 列表名 if 表达式2]
其中,表达式1表示的是列表生成元素表达式,它可以是有返回值的函数;表达式2是条件过滤语句,可以过滤掉不符合条件的值。
以下是简单的实例:
#列表推导式
#将list1乘以2倍输出
list1=[1,2,3]
print([i*2 for i in list1 if i>1])
#list1中长度大于3的字符串,小写全部转成大写输出
list1=['lily','judy','Anny','Bob']
print([str.upper() for str in list1 if len(str)>3])
#打印20以内可以被2整除的整数
print([num for num in range(20) if num%2==0])
字典(dict)推导式
字典推导式的一般格式为:
{键:值表达式 for 键 in 序列}
或
{键:值表达式 for 键 in 序列 if 条件表达式}
下面是简单的实例:
#字典推导式
#列表元素作为键,列表元素的长度作为值
list1=['name','sex','age']
dict1={str:len(str) for str in list1}
print(dict1)
#用推导式复制出一个拥有相同键值对的字典
dict2={'name':'卷鹅','sex':'男','age':28}
dict3={str:dict2[str] for str in dict2.keys()}
print(dict3)
print(id(dict2)) #对比两个字典的id,是不同的
print(id(dict3))
#用推导式计算三个整数的幂方
dict4={num:num**2 for num in range(1,5)}
print(dict4)
#加上筛选条件
dict4={num:num**2 for num in range(1,5) if num!=3}
print(dict4)
集合(set)推导式
集合推导式的一般格式为:
{表达式 for 变量 in 序列}
或
{表达式 for 变量 in 序列 if 条件表达式}
简单实例如下:
#集合推导式
set1={var**3 for var in range(1,6)}
print(set1)
set2={ch for ch in('a','b','c','d','e') if ch not in ('a','c')}
print(set2)
注意:输出的集合是无序的
元组(tuple)推导式(生成器表达式)
元组推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的元组。
元组推导式基本格式:
(表达式 for 变量名 in 序列)
或
(表达式 for 变量名 in 序列 if 条件表达式)
元组推导式和列表推导式的用法完全相同,只是元组推导式是用 () 圆括号将各部分括起来,而列表推导式用的是中括号 [],另外元组推导式返回的结果是一个生成器对象。
但是我们可以用类型转换函数将它转换为一个元组
简单的实例如下:
#元组推导式
a = (x for x in range(1,10))
print(a)
print(type(a))
tuple1=tuple(a)
print(tuple1)
print(type(tuple1))