You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何不排序天数列表即可关联月份列表与对应天数?

无需排序天数列表实现月份天数关联的解决方案

首先需要说明:你提到的「先对天数列表排序再拼接两个列表」的方案本身存在逻辑问题,排序后的t1顺序为[28,30,30,30,30,31,31,31,31,31,31,31],和公历月份的实际天数顺序完全不匹配,拼接后会出现1月对应28天的错误,无法得到目标结果。

无需排序t1的实现方法有两种,可根据使用场景选择:

方案1:基于公历固定规则直接拼接

如果不需要强制复用t1的元素,直接用公历非闰年的月份天数规则匹配月份列表即可,代码实现最简洁:

# 原始输入列表
t1 = [28,31,31,30,31,30,31,31,31,30,30,31]
t2 = ['Jan','Feb','March','Avr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']

# 目标结果使用的月份别名映射(匹配输出中的月份拼写要求)
month_alias = {
    'Jan': 'Jan',
    'Feb': 'Fev',
    'March': 'Mars',
    'Avr': 'Avr',
    'May': 'Mai',
    'Jun': 'Juin',
    'Jul': 'Juil',
    'Aug': 'Aout',
    'Sep': 'Sep',
    'Oct': 'Oct',
    'Nov': 'Nov',
    'Dec': 'Dec'
}

# 公历非闰年各月天数,和t2顺序一一对应
correct_days_order = [31,28,31,30,31,30,31,31,30,31,30,31]

result = []
for month, days in zip(t2, correct_days_order):
    result.append(month_alias[month])
    result.append(days)

print(result)

输出结果和要求的目标完全一致:['Jan', 31, 'Fev', 28, 'Mars', 31, 'Avr', 30, 'Mai', 31, 'Juin', 30, 'Juil', 31, 'Aout', 31, 'Sep', 30, 'Oct', 31, 'Nov', 30, 'Dec', 31]

方案2:强制复用原始t1元素,不排序

如果要求必须使用给定的t1中的元素,不能手动写天数顺序,也不允许排序,可先统计t1内各天数的数量,再按月份规则取用:

from collections import Counter

# 原始输入列表
t1 = [28,31,31,30,31,30,31,31,31,30,30,31]
t2 = ['Jan','Feb','March','Avr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']

month_alias = {
    'Jan': 'Jan',
    'Feb': 'Fev',
    'March': 'Mars',
    'Avr': 'Avr',
    'May': 'Mai',
    'Jun': 'Juin',
    'Jul': 'Juil',
    'Aug': 'Aout',
    'Sep': 'Sep',
    'Oct': 'Oct',
    'Nov': 'Nov',
    'Dec': 'Dec'
}

# 统计t1中各天数的剩余可用数量
days_stock = Counter(t1)
# 定义每个月对应的正确天数
month_days_rule = {
    'Jan': 31, 'Feb':28, 'March':31, 'Avr':30, 'May':31, 'Jun':30,
    'Jul':31, 'Aug':31, 'Sep':30, 'Oct':31, 'Nov':30, 'Dec':31
}

result = []
for month in t2:
    target_days = month_days_rule[month]
    result.append(month_alias[month])
    result.append(target_days)
    # 扣除对应天数的库存,确保用的是t1中的元素
    days_stock[target_days] -= 1

# 验证所有t1元素都已用完,无遗漏无多余
assert all(stock == 0 for stock in days_stock.values())
print(result)

输出结果和目标完全一致,全程没有对t1做排序操作。

内容的提问来源于stack exchange,提问作者Maryam Ouafik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:15:05