Python列表推导式

Python列表推导式

一.为什么要学习列表推导式 母鸡啊

1.列表推导式可以说在Python程序开发时应用广泛。
2.列表推导式可以使用非常简洁的方式来快速生成满足特定需求的列表,且代码具有非常强的可读性。
3.Python的内部实现对列表推导式做了大量优化,可以保证很快的运行速度。

二.开始学习列表推导式了 快醒醒

1.语法:[表达式 for 变量 in 序列或迭代对象]
列表推导式在逻辑上相当于一个循环,但形式更加简洁
2.具体操作:
①简单举例

>>> list = [x*x for x in range(10)]
>>> print(list)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> print(sum(list))
285

②使用列表推导式实现嵌套列表的平铺

>>> vec = [[1,2,3],[4,5,6],[7,8,9]]
>>> list = [num for elem in vec for num in elem]
>>> print(list)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
'''
在这个列表推导式中有两个循环,其中第一个循环为外循环,执行得慢;
第二个循环为内循环,执行得快。
'''
#用循环实现其等价写法:
vec = [[1,2,3],[4,5,6],[7,8,9]]
result= []
for elem in vec:
    for num in elem:
       result.append(num)
print(result)

③过滤不符合条件的元素

在列表推导式中可以使用if子句来进行筛选,只在结果列表中保留符合条件的元素。

>>> list = [1,2,3,45,6,7,7,8,90,22]
>>> list = [i for i in list if i >10]#if条件判断
>>> list
[45, 90, 22]
>>> list = [x*x if x%2 != 0 else x for x in[1,2,3,4,5]]#if-else条件判断
>>> list
[1, 2, 9, 4, 25]
#已知成绩列表查找最高分学生
scores = {'zhangsan':11,"lisi":22,"wanngwu":33}
highest = max(scores.values())
highestperson = [name for name,score in scores.items() if score == highest]
print(highestperson)

#使用列表推导式查找列表中最大元素的位置
>>> from random import randint
>>> x = [randint(1,10) for i in range(10)]#randint(1,10)是在1-10之间随机生成一个数,后面range(10)的作用是循环10次
>>> x
[2, 6, 5, 9, 7, 4, 8, 3, 1, 5]
>>> m = max(x)
>>> m
9
>>> index_l = [index for index,value in enumerate(x) if value == m]
>>> index_l
[3]

④使用多个循环实现多序列元素的任意组合

>>> l = [(x,y) for x in[1,2,3] for y in[3,2,4] if x != y]
>>> l
[(1, 3), (1, 2), (1, 4), (2, 3), (2, 4), (3, 2), (3, 4)]
'''
对于包含多个循环的列表推导式,一定要清楚多个循环的执行顺序或嵌套关系
'''

⑤使用列表推导式实现矩阵转置

>>> matrix = [[1,2,3],[4,5,6],[7,8,9]]
>>> re_matrix = [[row[i] for row in matrix]for i in range(3)]
>>> re_matrix
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

⑥列表推导式中可以使用函数或复杂表达式

def f(v):
    if v%2 == 0:
        v *= 2
    else:
        v += 1
    return v
print([f(v) for v in [-1,0,1,2,3] if v > 0])
print([v*2 if v%2==0 else v+1 for v in [-1,0,1,2,3] if v > 0])

⑦列表推导式支持文件对象迭代

>>> fp = open("D:\各种文件\课程设计\郑州十四五规划.txt",'r',encoding = 'utf-8')
>>> print([line for line in fp])
#读取结果过长,省略
>>> fp.close()

三.抛个简单问题练练手吧

应用1:使用列表推导式生成100以内的所有素数
要求:一行代码干掉它!

>>> import math
>>> l = [p for p in range(2,100) if 0 not in[p%d for d in range(2,int(math.sqrt(p))+1)]]
>>> l
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

我可没作弊啊,核心代码确实就一行(傲娇
应用2:实现矩阵转置

matrix = [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12]]
print("原矩阵:",matrix)
print("转置矩阵为:",[[row[i] for row in matrix] for i in range(4)])
  • 9
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Python列表推导式是一种简洁的语法,用于快速创建列表。它允许我们在一行代码中使用循环和条件语句来生成列表元素。列表推导式的一般语法是在方括号内使用表达式和循环或条件语句。 引用\[1\]中的代码展示了一个使用两个嵌套循环的列表推导式的例子。通过使用range函数生成一系列数字,我们可以在循环中创建元组,并将其添加到空列表中。最终,我们得到了一个包含所有元组的列表。 引用\[2\]中的代码展示了一个简单的列表推导式的例子。通过使用range函数生成一系列数字,我们可以直接将这些数字添加到空列表中。 引用\[3\]中的代码展示了另一个使用两个嵌套循环的列表推导式的例子。与引用\[1\]中的代码相比,这里使用了更简洁的语法来生成包含所有元组的列表。 总结来说,Python列表推导式是一种简洁而强大的语法,可以帮助我们快速创建列表。它可以在一行代码中使用循环和条件语句来生成列表元素。 #### 引用[.reference_title] - *1* *2* *3* [Python列表推导式(更有风格的Python代码写法)](https://blog.csdn.net/weixin_48728769/article/details/124572778)[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^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值