纯干货分享python推导式知识点

推导式的定义

推导式可以简洁、高效地将散乱的数据组织起来存放到容器(列表、元组、字典、集合)中。

推导式是python简洁、优雅、高效的完美体现。熟练掌握推导式,相信会对你编写python程序有很大的帮助。

运用场景

推导式一般是配合循环使用的,通过推导式组织起来的数据可以很方便的循环处理,未经组织的零散数据处理起来会很麻烦。例如要找到很多数字中符合某种特征的数字,放入列表中循环判断处理就很方便。再如读取日志文件,需要筛选出符合某种条件的记录时,将数据组织成列表嵌套字典结构可读性会很高、处理也更加方便。python程序员在编写代码时几乎每天都会用到推导式。

推导式的构造

推导式可以创建容器对象(列表、元组、字典、集合等等),推导式的基本构造请看下图:

  • 容器模板可以是表达式,可以存在多个变量。
  • for语句可以嵌套多条for语句
  • if语句可对容器模板中的变量进行筛选,满足条件的才放入容器,不满足条件的则舍弃。

推导式案例

以下会列举非常多的代码示例,学习推导式的朋友一定要认真练习,在练习的过程中熟悉和掌握推导式。

不同容器的推导式:

# 列表推导式:0-9
l1 = [i for i in range(10)]
# 列表推导式:0-9范围内的偶数
l2 = [i for i in range(10) if i % 2 == 0]
print(l1)
print(l2)
# 元组推导式:0-9
t1 = tuple(i for i in range(10))  # 不用tuple生成的是迭代器
# 元组推导式:0-9范围内的偶数
t2 = tuple(i for i in range(10) if i % 2 == 0)  # 不用tuple生成的是迭代器
print(t1)
print(t2)
# 集合推导式:0-9
l1 = {i for i in range(10)}
# 集合推导式:0-9范围内的偶数
l2 = {i for i in range(10) if i % 2 == 0}
print(l1)
print(l2)
# 字典推导式,键是0-9,值是a-j
d1 = {x: y for x, y in zip(range(10), 'abcdefghij')}
# 字典推导式,键是0-9,值是a-j
d2 = {x: y for x, y in zip(range(10), (chr(i) for i in range(97, 107)))}
# 字典推导式,一行代码互换键和值
d3 = {y:x for x,y in d1.items()}
print(d1)
print(d2)
print(d3)

out:
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
(0, 2, 4, 6, 8)
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
{0, 2, 4, 6, 8}
{0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e', 5: 'f', 6: 'g', 7: 'h', 8: 'i', 9: 'j'}
{0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e', 5: 'f', 6: 'g', 7: 'h', 8: 'i', 9: 'j'}
{'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4, 'f': 5, 'g': 6, 'h': 7, 'i': 8, 'j': 9}

多条for嵌套推导式:

# 注意多条for嵌套时,先循环最左边,再循环右边
list1 = [(x, y) for x in range(5) for y in range(3)]
list2 = [[x,y,z] for x in range(1,3) for y in range(1,4) for z in range(1,3)]
print(list1)
print(list2)

out:
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2), (3, 0), (3, 1), (3, 2), (4, 0), (4, 1), (4, 2)]
[[1, 1, 1], [1, 1, 2], [1, 2, 1], [1, 2, 2], [1, 3, 1], [1, 3, 2], [2, 1, 1], [2, 1, 2], [2, 2, 1], [2, 2, 2], [2, 3, 1], [2, 3, 2]]

容器模板:

list1 = [(x, y) for x in range(3) for y in range(3)] #list内的元素是tuple
list2 = [{x, y} for x in range(3) for y in range(3)] #list内的元素是set
list3 = [[x, y] for x in range(3) for y in range(3)] #list内的元素是list
print(list1)
print(list2)
print(list3)

out:
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
[{0}, {0, 1}, {0, 2}, {0, 1}, {1}, {1, 2}, {0, 2}, {1, 2}, {2}]
[[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]

容器模板中使用表达式:

# 创建字典,键值对是0:a..9:j
dict1 = {x: y for x, y in zip(range(10), 'abcdefghij')}
# 创建字典,键值对是0:a..9:j,将键转换成字符型,将值从小写字母转换成大写字母
dict2 = {str(x): y.upper() for x, y in zip(range(10), 'abcdefghij')} 
print(dict1)
print(dict2)

out:
{0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e', 5: 'f', 6: 'g', 7: 'h', 8: 'i', 9: 'j'}
{'0': 'A', '1': 'B', '2': 'C', '3': 'D', '4': 'E', '5': 'F', '6': 'G', '7': 'H', '8': 'I', '9': 'J'}

if筛选元素:

list1 = [chr(i) for i in range(97, 123)]  # 创建列表,元素是26个小写字母
list2 = [chr(i) for i in range(97, 123) if i % 2 == 0]  # 创建列表,只保留ascii值是偶数的字母
list3 = [chr(i) for i in range(97, 123) if i % 2 == 1]  # 创建列表,只保留ascii值是奇数的字母
list4 = [chr(i) for i in range(97, 123) if i < 97 + 13]  # 创建列表,只保留26个字母的前面一半
list5 = [chr(i) for i in range(97, 123) if i >= 97 + 13]  # 创建列表,只保留26个字母的后面一半

print(list1)
print(list2)
print(list3)
print(list4)
print(list5)

out:
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
['b', 'd', 'f', 'h', 'j', 'l', 'n', 'p', 'r', 't', 'v', 'x', 'z']
['a', 'c', 'e', 'g', 'i', 'k', 'm', 'o', 'q', 's', 'u', 'w', 'y']
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm']
['n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

纯干货分享python推导式知识点,如果觉得对你有启发和帮助,欢迎关注、点赞、转发,素质三连,不胜感谢。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python高阶知识点包括但不限于以下几个方面: 1. 函数编程:Python支持函数编程范,其中包括函数作为一等公民、高阶函数、匿名函数(lambda表达)、闭包、装饰器等概念和技巧。 2. 迭代器和生成器Python的迭代器协议和生成器机制可以让你更高效地处理大量数据或者无限序列,同时减少内存占用。 3. 并发和并行编程:Python提供了多线程和多进程的模块,如threading和multiprocessing,以及协程库如asyncio来支持异步编程。 4. 元编程:Python的元类机制允许你在运行时动态地创建类,修改类的属性和方法等。 5. 装饰器:Python的装饰器是一种特殊的函数,可以用来修改其他函数的行为,常用于代码重用、日志记录、性能分析等方面。 6. 上下文管理器:通过with语句,Python的上下文管理器提供了一种管理资源(如文件、网络连接)的便捷方,确保资源的正确打开和关闭。 7. 反射和元数据:Python的反射机制允许你在运行时获取对象的信息和操作对象的属性和方法。 8. 异常处理:Python的异常处理机制可以帮助你处理程序中的错误和异常情况,保证程序的稳定性和可靠性。 以上是一些Python的高阶知识点,掌握这些知识可以让你更加深入地理解和使用Python编程语言。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [21个高级Python知识点总结,干货!](https://blog.csdn.net/youmaob/article/details/128899362)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值