Python入门学习(三):列表推导式和生成器表达式

记录每天学习代码的过程:


#列表推导式对可读性的影响
# 方式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版)

Python的map和filter函数介绍

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃花椒的兔酱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值