zoukankan      html  css  js  c++  java
  • python之列表推导和生成器表达式

    首先来看一下代码:

    chars = "abcd"
    tmp = []
    for char in chars:
        tmp.append(ord(char))
    print(tmp)

    这是一般的写法,将字符串中的每一个字符转换称ASCII码,然后存进一个tmp数组。

    利用列表推导的方式

    tmp = [ord(char) for char in chars]

    输出:[97,98,99,100]

    列表推导中也可以使用if和else。

    当只有一个if时:

    chars = "abcd"
    tmp = [ord(char) for char in chars if ord(char)>=98]
    print(tmp)

    输出:['b','c','d']

    额外提一下,当然我们也可以利用filter和map达到相同的效果

    tmp = list(filter(lambda x:x>=98,map(ord,chars)))

    这句话的意思是,使用map对chars中的每一个字符利用ord函数进行处理。再使用filter对这每一个字符的ASCII码进行过滤大于等于98的,最后将这些符合条件的值存进一个列表中。lambda x:x>=98是一个匿名函数

    有一个if else时:

    chars = "abcd"
    tmp = [True if ord(char)>=98 else False for char in chars]
    print(tmp)

    输出:[False, True, True, True]

    一般而言,列表推导应尽量保持简短。

    再看下一个例子:利用列表推导计算笛卡儿积(以衣服的颜色和尺寸为例)

    colors = ["black","white"]
    sizes = ["S","M","L"]
    tshirts = [(color,size) for color in colors for size in sizes]
    print(tshirts)

    生成器表达式可以用于生成其它数据类型的序列,虽然列表推导也可以初始化元祖、数组和其它类型,但是生成器表达式是更好的选择。这是因为生成器表达式背后遵从迭代器协议,可以逐个产生元素,而不是先建立一个完整的列表。

    生成器表达式语法和列表差不多,只不过把方括号变成圆括号

    用生成器表达式生成元组和数组例子:

    chars = "abcd"
    tmp = tuple(ord(char) for char in chars)
    print(tmp)

    输出:(97, 98, 99, 100)

    import array
    chars = "abcd"
    a = array.array("I",(ord(char) for char in chars))
    print(a)

    输出:array('I', [97, 98, 99, 100])

    array的构造方法须提供两个参数,第一个是数组中元素的存储方式。如果生成器表达式是唯一的参数,就不用括号括起来,这里不是唯一的,因此要用括号括起来。

    colors = ["black","white"]
    sizes = ["S","M","L"]
    for tshirt in ("%s %s" % (c,s) for c in colors for s in sizes):
        print(tshirt)

    输出:

    black S
    black M
    black L
    white S
    white M
    white L

  • 相关阅读:
    苏州是新的一线城市拦路虎?
    SAP MM ME57界面看到的供应源跟Source List主数据不一致?
    SAP QM 检验批里样品数量的确定
    SAP QM 检验批里某检验特性的取样数量跟检验计划设置不符?
    SAP QM 主检验特性主数据关键字段解释
    SAP S4HANA TR传输之操作
    SAP QA32试图做UD,系统报错-工厂 BTYC中的 QM 基选设置需要维护
    使用 boost.asio 简单实现 异步Socket 通信
    fedora 28/29 配置 C++ 环境
    gitlab 和 github 配置 SSH Keys
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12174138.html
Copyright © 2011-2022 走看看