Python中如何使用tuple()函数生成指定范围的年月元组?
在Python中更简洁地生成指定年月元组列表
首先明确:你完全可以用tuple()函数创建这类年月元组(比如tuple([y, m])就能得到(y,m)),但直接用括号(y,m)是更简洁的写法,没必要额外调用tuple()。
针对你需要生成的序列(2020年12-1月、2019年12-1月、2018年12-7月的元组列表),这里提供两种比嵌套循环更简洁的实现方式:
方式一:列表推导式
把原有的嵌套循环逻辑扁平化,一行完成,可读性和简洁性兼顾:
monthyears = [ (y, m) for y in range(2020, 2017, -1) for m in range(12, 6 if y == 2018 else 0, -1) ]
方式二:用itertools.chain拼接序列
如果年份的月份规则差异较大,这种方式逻辑更清晰,每个年份的月份范围单独定义:
from itertools import chain # 生成每个年份的年月元组生成器 year_2020 = ((2020, m) for m in range(12, 0, -1)) year_2019 = ((2019, m) for m in range(12, 0, -1)) year_2018 = ((2018, m) for m in range(12, 6, -1)) # 拼接所有生成器并转为列表 monthyears = list(chain(year_2020, year_2019, year_2018))
两种方式都能得到和你原代码完全一致的输出结果,且代码更紧凑。
内容的提问来源于stack exchange,提问作者bearcub
相关产品推荐
相关产品推荐

