ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python学习笔记:列表推导式

2021-11-04 18:01:27  阅读:145  来源: 互联网

标签:10 推导 Python list 列表 range


一、介绍

Python 中有个语法糖(syntactic sugar),就是 list comprehension,即“列表推导式”。

同样适用于 dictset 等一系列可迭代的数据结构。

  • 使用语法
out_list = [x for x in list if express_condition]

其中的 if 条件判断语句可有可无。

二、range函数

Pythonrange 函数可以用来创建一个整数列表,一般用在 for 循环中。

  • 使用语法
range(start, stop, [, step])
start -- 开始
stop -- 结束(不包含)
setp -- 步长

列表推导式是通过一个可迭代对象来生成列表,range 是列表推导式中最常用的可迭代对象,是精髓之一。

三、实操

1.列表推导式

  • 列表推导式会遍历可迭代对象,然后按照 for 前的表达式进行运算,生成最终的列表
  • 如果有 if 条件语句, for 遍历后紧跟着进行条件判断
  • 如果有多个 for 循环,则最终的数据数量为多个 for 循环的笛卡尔积
  • 可以进行嵌套的列表推导,与嵌套 for 循环的原理相同
[x**2 for x in range(10)]
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

[x**2 for x in range(10) if x > 5]
# [36, 49, 64, 81]

[x for x in range(10) if x % 2 == 0]
# [0, 2, 4, 6, 8]

[(x, x**2) for x in range(5)]
# [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16)]

dict([(x, x**2) for x in range(5)])
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

[(x, y) for x in range(10) if x % 2 if x > 3 for y in range(10) if y > 7 if y != 8]
# [(5, 9), (7, 9), (9, 9)]

a = [2,4,6]
b = [4,3,-9]
[a[i] + b[i] for i in range(len(a))]
# [6, 7, -3]

[x * y for x in [1,2,3] for y in [1,2,3]]
# [1, 2, 3, 2, 4, 6, 3, 6, 9]

li = [1,2,3,4]
def mul2(x):
    return x*2
[mul2(i) for i in li]
# [2, 4, 6, 8]

# 嵌套循环 展平矩阵
matrix = [[1,2,3], [4,5,6], [7,8,9]]
[i for row in matrix for i in row]
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

2.字典(dict)和集合(set)推导式

  • 将字典key和value互换
dic = {'a':10, 'b':20, 'c':30}
{value: key for key, value in dic.items()} # 返回键值对
# {10: 'a', 20: 'b', 30: 'c'}
  • 提取首字母
words_list = ['apple', 'oppo', 'vivo', 'xiaomi']
set(w[0] for w in words_list)
# {'a', 'o', 'v', 'x'}

集合是无序且不重复的,会自动去掉重复的元素。

三、总结

总的来说,就是把普通的多行 for 循环压缩成一行代码。

这种压缩语法适用于列表、字典、集合等可迭代数据结构。

  • 代码可读性 只需要一行代码
  • 局部作用域 不存在变量泄露问题
  • 尽量保持简洁

参考链接:Python的列表推导式

参考链接:Python中的列表推导式

参考链接:Python列表推导式

标签:10,推导,Python,list,列表,range
来源: https://www.cnblogs.com/hider/p/15509427.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有