参考: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

最新文章

  1. java中log4j用法详细讲解和一些小总结
  2. Java中的List操作
  3. Smtp邮件发送系统公用代码整理—总结
  4. BZOJ 2456 mod
  5. 3d max地形建造
  6. Java 热部署深入探索
  7. css09浮动属性
  8. 手机网页中的hover效果实现
  9. Java高效读取大文件(转)
  10. 《java入门第一季》之面向对象(多态练习)
  11. HTTP &RFC
  12. USBWriter之后恢复磁盘大小
  13. C#并发集合(转)
  14. shell工具-sort
  15. StartCoroutine 和 StopCoroutine
  16. 三、java面向对象编程_1
  17. LOJ P3959 宝藏 状压dp noip
  18. cutadapt 的安装与使用
  19. Delphi开发Android的几个注意
  20. dotnet core 实践——日志组件Serilog

热门文章

  1. 彻底理解synchronized
  2. JavaScript 字符串(String)对象的方法
  3. 手把手带你撸一把springsecurity框架源码中的认证流程
  4. 序列化之Serializer类与ModelSerializer类的使用
  5. String类 的基本用法
  6. zookeeper面试1-9
  7. JDK7u21反序列链学习
  8. 在网站copy时自带的版权小尾巴以及“复制代码“,可以怎么实现
  9. css 实现球里装水
  10. es6 class解析