列表推导和生成器表达式


列表推导唯一的作用:生成列表,如果想生成其他类型的序列,生成器表达式就派上了用场。
ASCII编码:ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。
标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。其中最后一位用于奇偶校验。
ASCII是单字节编码,无法用来表示中文(中文编码至少需要2个字节),所以,中国制定了GB2312编码,用来把中文编进去。但世界上有许多不同的语言,所以需要一种统一的编码。
Unicode:Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。Unicode最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。

编码解释参考出处

1.列表推导(list comprehension)和可读性

#without list comprehension
>>>symbols = '%^&*'
>>>codes  = []
>>>for symbol in symbols:
>>>codes.append(ord(symbol))
>>>codes
[36,56,988,565]#the Unicode is written in a random way. 
#with list conprehension
>>>symbols = '%^&*'
>codes=[ord(symbol) for symbol in symbols]#生成列表
>codes
[36,56,988,565]#the Unicode is written in a random way. 

2.列表推导同filter和map的比较

>symbols = '%^&*'
>beyond_ascii = [ord(s) for s in symbol if ord(s)>127]#生成列表
>beyond_ascii
[159,189,179,146]
>beyond_ascii = list (filter(lambda c:c>127, map(ord,symbols)))
#filter() 函数用于过滤序列,过滤掉ascii>127的元素,返回由符合条件元素组成的新列表。
#lambda arg:expression创建c>127的匿名函数
#map()接收函数ord()和序列symbols,并把ord()依次作用在symbols的每个元素上
>beyond_ascii
[159,189,179,146]

3.列表推导与笛卡尔积

笛卡尔积可以理解为向量乘法

colors = ['b','s','d']
sizes = ['ds','dd','lo']
tshirt = [(color,size)for size in sizes for color in colors]#生成列表
tshirt1 = [(color,size)for color in colors for size in sizes ]#生成列表
print(tshirt)
print(tshirt1)
>[('b', 'ds'), ('s', 'ds'), ('d', 'ds'), ('b', 'dd'), ('s', 'dd'), ('d', 'dd'), ('b', 'lo'), ('s', 'lo'), ('d', 'lo')]
>[('b', 'ds'), ('b', 'dd'), ('b', 'lo'), ('s', 'ds'), ('s', 'dd'), ('s', 'lo'), ('d', 'ds'), ('d', 'dd'), ('d', 'lo')]

4.生成器表达式

symbols = '%^&*'
tuple(ord(symbol) for symbol in symbols)
import array
array.array("I",(ord(symbol) for symbol in symbols))
print(tuple(ord(symbol) for symbol in symbols))
print(array.array("I",(ord(symbol) for symbol in symbols)))
>(37, 94, 38, 42)
>array('I', [37, 94, 38, 42])
#生成笛卡尔积
colors = ['black', 'white']
sizes = ['S', 'M', 'L']
for tshirt in ('{} {}'.format(color, size) for color in colors for size in sizes):
print(tshirt)

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

摘自流畅的python

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值