记录每天学习代码的过程:
#列表推导式对可读性的影响
# 方式1:基于一个字符串构建一个Unicode码点列表
symbols = '12345'
codes = []
for symbol in symbols:
codes.append(ord(symbol))
print(codes)
# 方式2:使用列表推导式基于一个字符串构建一个Unicode码点列表
symbols = '12345'
codes = [ord(symbol) for symbol in symbols]
print(codes)
"""
方式2更易于理解,因其意图是明确的
for循环能胜任许多任务,可以遍历一个序列,统计项数或挑选部分项,可以计算总数平均数,等等
"""
# 列表推导式于map和filter比较
# 使用列表推导式和map/filter组合构建同一个列表
symbols = '12345'
beyond_ascii = [ord(s) for s in symbols if ord(s) > 27]
print(beyond_ascii)
beyond_ascii = list(filter(lambda c: c > 27, map(ord, symbols)))
print(beyond_ascii)
"""
map函数的作用是将给定可迭代对象的元素作为参数传入指定的函数,经过函数计算生成一组新的可迭代对象。其基本用法如下:
map(func,*iterables)
*func:指定的函数名
*iterables:可迭代对象,如列表或者字符串等,可以有多个对象
需要注意的是在Python3中map函数返回的对象不再是列表,而是map object,需要用list函数将其转换成列表
filter函数的作用是根据指定函数来过滤可迭代对象,如果可迭代对象的元素函数返回值为True,则返回该元素,否则过滤掉该元素。如果不指定函数,则过滤掉False的元素。语法如下
filter(func or None,*iterables)
*func:指定的函数名
*iterables:可迭代对象,如列表或者字符串等,可以有多个对象
注意Python3的filter函数返回的是filter对象,需要用list函数转换成列表,和map函数类似。
"""
# 笛卡尔积
# 使用列表推导式计算笛卡尔积
colors = ['black', 'white']
sizes = ['S', 'M', 'L']
tshirts = [(color, size) for color in colors for size in sizes]
print(tshirts)
for color in colors:
for size in sizes:
print((color,size))
tshirts = [(color, size) for size in sizes
for color in colors]
print(tshirts)
# 生成器表达式
# 使用生成器表达式构建一个元组和一个数组
symbols = '12345'
print(tuple(ord(symbol) for symbol in symbols))
import array
print(array.array('I',(ord(symbol) for symbol in symbols)))
# 使用生成器表达式计算笛卡尔积
colors = ['black', 'white']
sizes = ['S', 'M', 'L']
for tshirts in (f'{c} {s}' for c in colors for s in sizes):
print(tshirts)
参考文献
流畅的Python(第2版)