Python列表推导式,字典推导式,元组推导式

参考:https://blog.csdn.net/A_Tu_daddy/article/details/105051821

元组推导式:

上图随机生成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

原文地址:https://www.cnblogs.com/Li-JT/p/15065102.html