1.2.4 python中列表、字典、集合推导式

本章引言

        有时候一些普遍的设计模式应用得非常广泛,慢慢的就形成了一种语法,或者叫 语法糖,Python 中的列表推导式 就是其中的典型代表。列表推导式是一种可以让代码更简洁,并且可以增加可读性和执行效率的方法,但是要掌握好这个语法则有些难。下面让我们一起来学习推导式吧。

基本概念

        推导式(又称解析式),是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列的结构体。共有三种推导

  • 列表(list)推导式

  • 字典(dict)推导式

  • 集合(set)推导式

 

列表推导式

概念

      列表解析式是将一个列表(实际上适用于任何可迭代对象)转换成另一个列表的工具。并且在转换过程中,可以指定元素必须符合一定的条件,才能添加至新的列表中,这样每个元素都可以按需要进行转换。

基本语法

new_list = [expression(i) for i in old_list if condition(i)]

与之对应的for 循环就是:

new_list = []for i in old_list:    if (condition):        new_list.append(expression(i))

示例​​​​​​​

>>> x = [i for i in range(10)]# 对每个元素求平方>>> print([i**2 for i in x])[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 每个元素乘以 3>>> print([i*3 for i in x])[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
# 获取其中的偶数>>> print([i for i in x if i%2==0])[0, 2, 4, 6, 8]

 

字典推导式

      字典推导和列表推导的使用方法是类似的,只不中括号该改成大括号。

基本语法

{key:value  for   key:value   in   可迭代对象]}

示例

    需求:声明一个字典实现字典的键值调换,使用字典推导式完成​​​​​​​

dict1={"name":"woodprogramming","age":10}dict2={value:key for key,value in dict1.items()}print(dict2)

 

集合推导式

       集合推导式和列表推导式极其相似,用法也完全一样,唯一的区别就在于将代表列表的符号[ ]替换成代表几个的符号{ }。​​​​​​​

list1 = [-5, -2, 0, 2, 5]  #创建一个列表
#筛选出list1列表中所有大于0的元素,结果为列表print([number for number in list1 if number > 0])   #[2, 5]#筛选出list1列表中所有大于0的元素,结果为集合print({number for number in list1 if number > 0})   #{2, 5}
#对list1列表每个元素求绝对值,结果为列表print([abs(number) for number in list1])   #[5, 2, 0, 2, 5]#对list1列表每个元素求绝对值,结果为集合print({abs(number) for number in list1})   #{0, 2, 5}  注意此处的集合自动去重

 

练一练

1.使用列表推导式完成,从控制台输入一个数,从0到该数之间的素数

参考答案:​​​​​​​

su=[i for i in range(2,int(input("请输入一个数:"))) if 0 not in [i%j for j in range(2,i-1)]]print(su)

2.使用推导式完成九九乘法表的输出

参考答案:

print('\n'.join([' '.join(['%2d *%2d = %2d' % (col, row, col * row) for col in range(1, row + 1)]) for row in range(1, 10)]))

需要了解更多可关注以下公众号,每日更新一篇测试开发文章

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zemuerqi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值