ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

12、推导式

2022-06-18 20:02:20  阅读:149  来源: 互联网

标签:10 12 推导 students list 列表 range


如果需要生成一个长度为 100、内容为 0 的列表,需要在括号中书写 100 个 0,既繁琐又容易出错,显然是不合适的。可以使用动态的方式完成这项任务:

list = []
for i in range(100):
    list.append(0)

如果需要生成一个包含 0 到 100 之间(不包括 100)所有的偶数的列表,可以在以上的代码基础上进行修改,如下所示:

list = []
for i in range(100):
    if i % 2 == 0:
        list.append(i)

Python 提供了列表推导的语法用于快速的构建一个列表,完成类似以上的任务

类似的,Python 提供了集合推导的语法用于快速的构建一个集合,以及字典推导的语法用于快速的构建一个字典。

列表推导

定义

注意在 for 前面的语句是循环时执行的语句

  1. 使用列表推导生成一个包含 4 个整数 0 的列表,代码如下:
>>> [0 for i in range(4)]
[0, 0, 0, 0]
  1. 使用列表推导生成一个包含 0 到 4 之间所有整数的列表,代码如下:
>>> [i for i in range(4)]
[0, 1, 2, 3]

条件语句

在循环中符合if条件语句的项目将输出for前面的表达式

使用列表推导生成一个包含 0 到 4 之间所有偶数的列表,使用 if i % 2 == 0 选择将偶数加入到列表,代码如下:

>>> [i for i in range(4) if i % 2 == 0]
[0, 2]

for 循环嵌套

第一个for循环嵌套第二个for循环,最后输出第一个for前面的表达式

使用列表推导生成一个包含两个字符的字符串列表,代码如下:

>>> [x + y for x in 'ABC' for y in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

应用举例

  1. 初始化长度为 10 的列表
>>> [0 for i in range(10)]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
  1. 将列表中的元素乘以 10
>>> list = [1, 2, 3]
>>> [i*10 for i in list]
[10, 20, 30]
  1. 将列表中所有的字符串变成大写
>>> list = ['www', 'imooc', 'com']
>>> [i.upper() for i in list]
['WWW', 'IMOOC', 'COM']
  1. 包含所有的正整数的列表
>>> list = [-1, 1, -2, 2, -3, 3]
>>> [i for i in list if i > 0]
[1, 2, 3]
  1. 初始化生成一个 M*N 的矩阵
>>> M = 2
>>> N = 3
>>> matrix = [[0 for col in range(N)] for row in range(M)]
>>> matrix
[[0,0,0], [0,0,0]]
  1. 将矩阵平坦化
>>> matrix = [[1,2,3],[4,5,6]]
>>> matrix2 = [matrix[row][col] for row in range(2) for col in range(3)]
>>> matrix2
[1,2,3,4,5,6]

集合推导

应用举例

  1. 包含从 0 到 10 之间所有整数的集合
>>> {i for i in range(10)}
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
  1. 将集合中的元素乘以 10
>>> set = {1, 2, 3}
>>> {i*10 for i in set}
{10, 20, 30}
  1. 将集合中所有的字符串变成大写
>>> set = {'www', 'imooc', 'com'}
>>> {i.upper() for i in set}
{'WWW', 'IMOOC', 'COM'}
  1. 包含所有的正整数的集合
>>> set = {-1, 1, -2, 2, -3, 3}
>>> {i for i in list if i > 0}
{1, 2, 3}
  1. 包含两个字符的字符串集合
>>> {x + y for x in 'ABC' for y in 'XYZ'}
{'AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ'}

字典推导

应用举例

  1. 创建从小写到大写的映射
>>> list = ['www', 'imooc', 'com']
>>> {i:i.upper() for i in list}
{'www': 'WWW', 'imooc': 'IMOOC', 'com': 'COM'}
  1. 对字典进行筛选
>>> all_students = {'tom': 95, 'jerry': 80, 'mike': 99, 'john': 70}
>>> good_students = {item[0]:item[1] for item in all_students.items() if item[1] > 90}
>>> good_students
{'tom': 95, 'mike': 99}
  1. 对字典进行筛选
>>> all_students = {'tom': 95, 'jerry': 80, 'mike': 99, 'john': 70}
>>> good_students = {name:grade for name,grade in all_students.items() if grade > 90}
>>> good_students
{'tom': 95, 'mike': 99}

参考资料

http://www.imooc.com/wiki/pythonlesson1/inferential.html

标签:10,12,推导,students,list,列表,range
来源: https://www.cnblogs.com/tiansz/p/16389090.html

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

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

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

ICode9版权所有