intellij idea安装 VR全景图片 numpy npm安装 variables inheritance webview 网络营销推广 notifications usb 广告投放系统源码 jquery多个元素绑定同一个事件 查看oracle连接数 abaqus是什么软件 pip环境变量配置 java 大文件上传 flutter优缺点 python自学教程 python中文手册 java文档 java声明变量 java代码 小米5c拆机 相机权限 pr黑场过渡 电脑手机模拟器 火萤壁纸下载 小米9截屏 相册制作工具 renderto 视频字幕制作软件 寂静城 显卡怎么设置 小米开发者选项 如何查看端口是否开放 任务栏跑到右侧怎么办 加字幕的软件 python画散点图 网页flash抓取器 追加评论可以删除吗
当前位置: 首页 > 学习教程  > python

盘点Python列表生成式的三种方法

2021/2/7 11:43:14 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

一、前言 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。 二、案例分析 三种方法 要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))。 print(list(range(1, 11))) 如果要生成[1x1, 2x2, 3x3,…

一、前言

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

二、案例分析

三种方法

要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))。

print(list(range(1, 11))) 

file 如果要生成[1x1, 2x2, 3x3, …, 10x10]怎么做?

  1. 方法一是循环:
L = [] 
for x in range(1, 11): 
    L.append(x * x) 
print(L)  

但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list:

print([x * x for x in range(1, 11)])  

file

写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来,十分有用,多写几次,很快就可以熟悉这种语法。

for循环后面还可以加上if判断,这样就可以筛选出仅偶数的平方:

for x in range(1, 11): 
    L.append(x * x) 

print([x * x for x in range(1, 11) if x % 2 == 0]) 

2. 使用两层循环,可以生成全排列

L = []for x in range(1, 11): L.append(x * x)print( [m + n for m in 'ABC' for n in 'XYZ'])

三层和三层以上的循环就很少用到了。

3. 运用列表生成式,可以写出非常简洁的代码。

例如,列出当前目录下的所有文件和目录名,可以通过一行代码实现:

import os  # 导入os模块,模块的概念后面讲到 

print([d for d in os.listdir('.')])  # os.listdir可以列出文件和目录 

for循环其实可以同时使用两个甚至多个变量,s比如dict的items()可以同时迭代key和value:

d = {'x': 'A', 'y': 'B', 'z': 'C'} 
for k, v in d.items(): 
    print(k, '=', v) 

因此,列表生成式也可以使用两个变量来生成list:

d = {'x': 'A', 'y': 'B', 'z': 'C' } 
print([k + '=' + v for k, v in d.items()] 

最后把一个list中所有的字符串变成小写:

L = ['Hello', 'World', 'IBM', 'Apple'] 
print([s.lower() for s in L]) 

如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,所以列表生成式会报错:

L = ['Hello', 'World', 18, 'Apple', None] 
print([s.lower() for s in L]) 

使用内建的isinstance函数可以判断一个变量是不是字符串:

x = 'abc' 
y = 123 
print(isinstance(x, str)) 

print(isinstance(y, str)) 

三、练习和思考

请修改列表生成式,通过添加if语句保证列表生成式能正确地执行。

# -*- coding: utf-8 -*- 
L1 = ['Hello', 'World', 18, 'Apple', None] 
L2=??? 

# 期待输出: ['hello', 'world', 'apple'] 
print(L2) 

练习参考代码 :

L2 =[s.lower() for s in L1 if isinstance(s, str) ] 

运行结果:

注:

运用列表生成式,可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁。

四、总结

本文基于Python基础,介绍了列表生成式,以案例为主,三种方法进行讲解。

分析不同方法的实现一样的效果。实际案例中需要注意的点,遇到的难点,提供有效的解决方法。最后通过练习和思考,对列表生成式加深理解。

欢迎大家积极尝试,有时候看到别人实现起来很简单,但是到自己动手实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。

代码很简单,希望对你学习有帮助

作者:Go语言进阶学习 | 转自:51CTO 点这里:2020Python高薪实战学习大合集**

[拿走不谢!Python 3.9 官方中文文档,限时领!] (http://dwz.date/dE6v)

[限时!速领!14张高清Python速查表,效率提升必备!] (http://dwz.date/dE6w)

[GitHub标星3W+,80个Python案例,带你轻松玩转Python学习!] (http://dwz.date/dE64)


本文链接: http://www.dtmao.cc/news_show_2000278.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?