zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【学习笔记 2】单调队列 & 单调栈
    【学习笔记 1】快速幂
    题解P1151
    题解 P6161【[Cnoi2020]高维】
    不知道叫啥的题目1
    神秘题目1
    5.30 模拟赛赛后总结
    矩阵乘法加速图上问题专题总结
    点分治&点分树 复习
    5.26赛后总结
  • 原文地址:https://www.cnblogs.com/Li-JT/p/15065102.html
Copyright © 2011-2022 走看看