zoukankan      html  css  js  c++  java
  • python的列表生成式

    一、r的防止字符转义

    print r"a
    b"

    运行结果:

    a
    b

    二、获取变量类型

    a = r"a
    b"
    print type(a)

     运行结果:

    <type 'str'>

    三、判断类型

    a = r"a
    b"
    print isinstance(a,str)

     运行结果:

    True

    四、对list、tuple、dict、set进行迭代

    4.1常用的方式

    list = ['a','b','c']
    for i in list:
        print i
    dict = {"k1":"v1","k2":"v2"}
    for k,v in dict.items():
        print k,v

    但是这种迭代方式会把list装到内存中进行迭代

    4.2使用迭代器来迭代

    list = ['a','b','c']
    for i in iter(list):
        print i
    dict = {"k1":"v1","k2":"v2"}
    for k,v in dict.iteritems():
        print k,v
    dict = {"k1":"v1","k2":"v2"}
    for k in dict.iterkeys():
        print k

    这种方式的迭代比较省内存

    4.3迭代值的同时迭代下标

    list = ['a','b','c']
    for index,value in enumerate(list):
        print index,value

    五、列表生成式

    根据集合生成列表

    list1 = ['a','b','c']
    list2 = [1,2]
    print [x*y for x in list1 for y in list2 if y>1 and y<3]

    运行结果是:

    ['aa', 'bb', 'cc']

    六、列表生成器

    通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
    所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

    只要把一个列表生成式的[]改成(),就创建了一个generator:
    g = (x * x for x in range(10))
    generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。
    但是我们一般通过for循环来迭代它,并且不需要关心StopIteration的错误。
    for n in g:
    print(n)

  • 相关阅读:
    HDU4529 郑厂长系列故事——N骑士问题 —— 状压DP
    POJ1185 炮兵阵地 —— 状压DP
    BZOJ1415 聪聪和可可 —— 期望 记忆化搜索
    TopCoder SRM420 Div1 RedIsGood —— 期望
    LightOJ
    LightOJ
    后缀数组小结
    URAL
    POJ3581 Sequence —— 后缀数组
    hdu 5269 ZYB loves Xor I
  • 原文地址:https://www.cnblogs.com/dongdone/p/5736189.html
Copyright © 2011-2022 走看看