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

如何对Python中zip合并后的列表按指定字母数字顺序排序?

解决字母数字混合字符串的同步排序问题

你的核心需求是对l1按字母前缀+数字数值的规则排序,同时让l2同步对应排序。之前的key函数逻辑错误:item[0][1:0]是空切片,而且没有正确处理数字部分的数值排序(字符串排序会让'A10'排在'A3'前面,不符合你的预期)。

正确实现步骤:

  1. 拆分l1中每个元素的字母前缀和数字后缀,把数字转为整数(确保按数值排序,而非字符串字典序)
  2. 用拆分后的结果作为sorted的排序键
  3. 排序后重新拆分出排序后的l1和l2

代码实现(正则版,支持多字母前缀):

import re

l1 = ['F2', 'G2', 'A10', 'H2', 'A3', 'E3', 'B10', 'C1', 'D1', 'E1', 'D2', 'C11', 'A1']
l2 = [40, 40, 90, 90, 90, 90, 90, 120, 120, 120, 120, 120, 90]

# 定义排序键:拆分字母和数字,字母按字典序,数字按数值
def sort_key(item):
    s = item[0]
    match = re.match(r'([A-Z]+)(\d+)', s)
    if match:
        letter = match.group(1)
        number = int(match.group(2))
        return (letter, number)
    return (s, 0)  # 兼容异常格式,你的数据可忽略

# 排序zip后的列表
sorted_pairs = sorted(zip(l1, l2), key=sort_key)

# 拆分回l1和l2
sorted_l1, sorted_l2 = zip(*sorted_pairs)

# 转为列表(zip默认返回元组,按需转换)
sorted_l1 = list(sorted_l1)
sorted_l2 = list(sorted_l2)

print(sorted_l1)
print(sorted_l2)

输出结果:

['A1', 'C1', 'D1', 'E1', 'D2', 'F2', 'G2', 'H2', 'A3', 'E3', 'A10', 'B10', 'C11']
[90, 120, 120, 120, 120, 40, 40, 90, 90, 90, 90, 90, 120]

轻量替代方案(仅适用于单个字母前缀):

如果你的l1元素都是单个字母加数字的格式(比如'A1'、'C11'),可以不用正则,手动拆分:

def sort_key(item):
    s = item[0]
    letter = s[0]
    number = int(s[1:])
    return (letter, number)

内容的提问来源于stack exchange,提问作者Michael Davila

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 16:12:42