python列表推导和生成器表达式知识点总结

作者:西西嘛呦 时间:2021-09-13 00:13:42 

首先来看一下代码:


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

来源:https://www.cnblogs.com/xiximayou/p/12174138.html

标签:python,列表推导,生成器表达式
0
投稿

猜你喜欢

  • Django与数据库交互的实现

    2024-01-15 19:23:20
  • 日常收集整理php正则表达式(超常用)

    2024-05-03 15:35:49
  • JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件

    2024-04-10 11:01:56
  • 解决Navicat for MySQL 连接 MySQL 报2005错误的问题

    2024-01-16 13:13:26
  • numpy实现神经网络反向传播算法的步骤

    2021-02-11 10:54:34
  • python3.7.2 tkinter entry框限定输入数字的操作

    2021-02-22 14:40:36
  • 解决vue2.x中数据渲染以及vuex缓存的问题

    2023-07-02 16:59:24
  • Jquery练习之表单验证实现代码

    2023-07-02 05:30:59
  • 使用 pytorch 创建神经网络拟合sin函数的实现

    2023-02-04 03:31:40
  • Python深度学习之实现卷积神经网络

    2021-08-11 01:57:01
  • django模型查询操作的实现

    2023-03-31 04:01:04
  • 让你Python到很爽的加速递归函数的装饰器

    2022-10-23 13:04:47
  • Python一个简单的通信程序(客户端 服务器)

    2023-09-09 11:09:39
  • vue中的数据绑定原理的实现

    2024-05-05 09:09:34
  • Vue 通过自定义指令回顾v-内置指令(小结)

    2023-07-02 16:56:42
  • python中迭代器(iterator)用法实例分析

    2023-12-16 05:32:51
  • Mysql数据库错误代码中文详细说明

    2024-01-16 09:55:21
  • 微信小程序开发之tabbar图标和颜色的实现

    2024-06-20 01:43:02
  • MSSQL 基本语法及实例操作语句

    2012-07-11 15:40:09
  • Bootstrap导航条学习使用(二)

    2024-05-02 17:31:16
  • asp之家 网络编程 m.aspxhome.com