python推导式

推导式概念

从一个数据序列构建另一个新的数据序列的结构体

可以支持的数据结构推导式

  • 列表(list)推导式
  • 字典(dict)推导式
  • 集合(set)推导式
  • 元组(tuple)推导式

列表推导式格式为:

表达式 for 变量 in 列表
[out_exp_res for out_exp in input_list]

or 

表达式 foor 变量 in 列表 if 条件
[out_exp_res for out_exp in input_list if condition]
  • out_exp_res:列表生成元素表达式,可以是有返回值的函数
  • for out_exp in input_list : 迭代 input_list 将 out_exp 传入到 out_exp_res 表达式中
  • if condition:条件语句,可以过滤列表中不符合条件的值

例如 下实例 : 过滤长度小于等于3的字符串,并大写输出

names = ['Bob','Tom','alice','Jerry','Wendy','Smith']
new_names = [name.upper() for name in names if len(name)>3]
print(new_names)
['ALICE', 'JERRY', 'WENDY', 'SMITH']

再例如 输出30以内可以被3整除的数

num = [i for i in range(30) if i % 3 == 0]
print(num)
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]


字典推导式

字典推导式的格式:

{key_exper:value_exper for value in collection}

or

{key_exper: value_exper for value in collection if conditional}

例如 下实例 :使用字符串及其长度创建字典

listdemo = ['Google','Runoob', 'Taobao']
dict = {key:len(key) for key in listdemo}
print(dict)
{'Google': 6, 'Runoob': 6, 'Taobao': 6}

再例如 提供三个数字,以三个数字为键,其平方为值输出一个字典

new_dict1= {x:x**2 for x in (2,3,4)}
print(new_dict1)
type(new_dict1)
{2: 4, 3: 9, 4: 16}





dict


集合推导式

集合推导式的基本格式:

{expression for item in Sequence}

or 

{expression for item in Sequence if conditional}

例如 以下实例:输出 1,2,3 数的2次方

setnew = {i**2 for i in (1,2,3)}
print(setnew)
{1, 4, 9}

再例如 筛选剔除字母abc并输出

n = 'abcqwebracadabra'
a = {x for x in n if x not in 'abc'}
print(a)
type(a)
{'w', 'q', 'e', 'd', 'r'}





set

元组推导式(生成器表达式)

元组推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的元组

元组表达式的基本格式:

(expression for item in Sequence )

or 

(expression for item in Sequence if conditional )

元组推导式和列表推导式的用法差不多,元组用的是(),而列表用的是[],需要注意的是元组推导式返回的结果是一个生成器对象

y = (x for x in range(1,10))
print(y)
type(y)

tuple(y)
<generator object <genexpr> at 0x7fb271c35e40>





(1, 2, 3, 4, 5, 6, 7, 8, 9)

可以看到上面的实例第二行输出的是一个生成器对象,之后可以用元祖函数转换成元组的形式


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱喝清粥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值