如何用Numpy以最Pythonic方式生成年月组合二维数组?
实现年份与月份的元素级组合
下面提供几种符合Python/NumPy风格的实现方式,可根据你的使用场景选择:
1. 基于NumPy的最优方案(适配已有数组)
既然你已经用NumPy创建了年份和月份数组,这种方法最贴合NumPy的使用习惯,执行效率也最高:
import numpy as np years = np.arange(2024, 2051, 1) months = np.arange(1, 13, 1) # 生成按年份优先的网格,再重塑为目标二维数组 year_grid, month_grid = np.meshgrid(years, months, indexing='ij') result = np.stack([year_grid.ravel(), month_grid.ravel()], axis=1)
indexing='ij'参数保证先遍历完某一年的所有月份,再切换到下一年;ravel()将二维网格展平为一维数组,最后stack把年份和月份数组按列组合,得到你需要的[[年,月], ...]格式。
2. 纯Python简洁写法(itertools)
如果更倾向纯Python的简洁实现,itertools.product可以直接生成年份与月份的笛卡尔积:
import itertools years = range(2024, 2051) months = range(1, 13) # 生成元组列表,若需要列表的列表则做转换 result = list(itertools.product(years, months)) # 转为列表的列表: # result = [list(pair) for pair in itertools.product(years, months)]
3. 直观的列表推导式
手动嵌套循环的列表推导式,逻辑清晰易懂,适合快速实现:
years = range(2024, 2051) months = range(1, 13) result = [[year, month] for year in years for month in months]
内容的提问来源于stack exchange,提问作者Charlie Benger-Stevenson
相关产品推荐
相关产品推荐

