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