Python列表推导式,字典推导式,元组推导式
2024-10-20 05:48:17
参考:https://blog.csdn.net/A_Tu_daddy/article/details/105051821
my_list = [
[[1, 2, 3], [4, 5, 6]]
]
flat = [x for sub1 in my_list for sub2 in sub1 for x in sub2]
print(flat)
# [1, 2, 3, 4, 5, 6] flat2 = [((x for x in sub2) for sub2 in sub1) for sub1 in my_list]
print(list(flat))
# [1, 2, 3, 4, 5, 6]
#个人理解:列表推导式,分析时,先把要输出的东西给放一边。然后每个for的开始到下一个for开始之前是一句(从左到右),最后再把结果放到/赋值给要输出的x即可。
元组推导式:
上图随机生成10到100之间的随机数,当i在1到10时,注意此处是元组推导式,使用小括号括起来的(列表推导式是用[]中括号括起来的),运行后生成的结果如下图示:
元组推导式和列表推导式不一样,其生成的是一个对象, 一个生成器对象,并不直接是一个元组;如果想要得到一个元组或列表的话,那么就需要通过tuple()或list()来进行转化。
e.g.:
import random
print(tuple(random.randint(10,1000) for i in range(10)))
print(list(random.randint(10,1000) for i in range(10))) 输出为:
(930, 139, 668, 598, 493, 936, 742, 763, 339, 205)
[437, 689, 372, 171, 876, 451, 336, 903, 513, 727]
上述,得到的是10到1000之间的10个随机数。
元组推导式得到的结果是一个生成器对象,并不是一个元组。
如果我们不想转换成元组或列表,但还想输出生成器中的内容,那就要使用for循环来遍历它了。
import random
yz=(random.randint(10,1000) for i in range(10))
for i in yz:
print(i,end=' ') #不换行,用空格分割 输出为: 725 10 513 74 42 683 143 997 315 795
此处注意:输出的是单个数,并不是元组;如果用默认的换行的话,输出的数更是每个一行(所以输出没有外面的括号);
此外:对于生成器对象除了可以使用for循环来遍历它,还可以使用__next__来遍历它。
import random #导入随机数模块
yz=(random.randint(10,1000) for i in range(10))
print(yz.__next__())#输出生成器中的第一个元素
print(yz.__next__())#输出生成器中的第二个元素
print(yz.__next__())#输出生成器中的第三个元素 420
709
760
继续:
import random #导入随机数模块
yz=(random.randint(10,1000) for i in range(10))
for i in yz:
print(i,end=' ')
print(tuple(yz)) 输出为:
935 51 628 73 392 442 145 694 369 173 ()
可看到,当for循环输出生成器对象中的10个元素;再次转换成元组输出,但此时生成器的内容为空了,因为:当我们对生成器对象当中的内容进行访问后,这个生成器对象已经不存在了,所以再对它进行转换后,它就是一个空的元组了;
如果希望再使用这个生成器对象,则必须重新生成。
字典推导式
参考:https://jingyan.baidu.com/article/59a015e3fcd623b695886575.html
最新文章
- java中log4j用法详细讲解和一些小总结
- Java中的List操作
- Smtp邮件发送系统公用代码整理—总结
- BZOJ 2456 mod
- 3d max地形建造
- Java 热部署深入探索
- css09浮动属性
- 手机网页中的hover效果实现
- Java高效读取大文件(转)
- 《java入门第一季》之面向对象(多态练习)
- HTTP &;RFC
- USBWriter之后恢复磁盘大小
- C#并发集合(转)
- shell工具-sort
- StartCoroutine 和 StopCoroutine
- 三、java面向对象编程_1
- LOJ P3959 宝藏 状压dp noip
- cutadapt 的安装与使用
- Delphi开发Android的几个注意
- dotnet core 实践——日志组件Serilog