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

如何在Python中将含逗号分隔元素的列表转换为嵌套列表?

转换嵌套列表并高效排序的实现方案

原输入列表

original_list = ['BUD', 'CDG', 'DEL', 'DOH', 'DSM,ORD', 'EWR,HND', 'EWR,HND,ICN', 'EWR,HND,JFK', 'EWR,HND,JFK,LGA', 'EWR,HND,JFK,LGA', 'EWY,LHR', 'EWY,LHR,SFO,DSM', 'EWY,LHR,SFO,DSM,ORD,BGI', 'EWY,LHR,SFO,DSM,ORD,BGI,LGA', 'EWY,LHR,SFO,SAN', 'HND,ICN', 'ICN', 'ICN,JFK', 'ICN,JFK,LGA', 'ICN,JFK,LGA', 'LGA', 'LGA', 'LHR,SFO', 'LHR,SFO,DSM,ORD', 'LHR,SFO,SAN', 'LHR,SFO,SAN,EWY', 'ORD,BGI', 'SAN', 'SAN,EWY,LHR', 'SAN,EWY,LHR,SFO,DSM', 'SAN,EWY,LHR,SFO,DSM,ORD,BGI', 'SAN,EWY,LHR,SFO,DSM,ORD,BGI,LGA', 'SAN,EWY,LHR,SFO,DSM,ORD,BGI,LGA', 'SFO,DSM', 'SFO,DSM,ORD,BGI', 'SFO,SAN', 'SFO,SAN,EWY,LHR', 'SIN,CDG,BUD', 'TLV,DEL,DOH']

1. 转换为嵌套列表

遍历原列表,将每个逗号分隔的字符串拆分为子列表:

nested_list = [item.split(',') for item in original_list]

2. 去重(可选,解决原列表重复项问题)

由于列表不可直接哈希,先转为元组存入集合去重,再转回列表:

unique_nested = [list(tpl) for tpl in set(tuple(sublist) for sublist in nested_list)]

3. 高效排序

Python内置的sort采用Timsort算法,时间复杂度为O(k log k)(k为去重后的列表长度),可根据需求选择排序规则:

  • 按子列表长度排序(短列表在前):
    unique_nested.sort(key=lambda x: len(x))
    
  • 按子列表首元素字典序排序:
    unique_nested.sort(key=lambda x: x[0])
    
  • 先按长度排序,再按首元素字典序排序:
    unique_nested.sort(key=lambda x: (len(x), x[0]))
    

完整代码示例

original_list = ['BUD', 'CDG', 'DEL', 'DOH', 'DSM,ORD', 'EWR,HND', 'EWR,HND,ICN', 'EWR,HND,JFK', 'EWR,HND,JFK,LGA', 'EWR,HND,JFK,LGA', 'EWY,LHR', 'EWY,LHR,SFO,DSM', 'EWY,LHR,SFO,DSM,ORD,BGI', 'EWY,LHR,SFO,DSM,ORD,BGI,LGA', 'EWY,LHR,SFO,SAN', 'HND,ICN', 'ICN', 'ICN,JFK', 'ICN,JFK,LGA', 'ICN,JFK,LGA', 'LGA', 'LGA', 'LHR,SFO', 'LHR,SFO,DSM,ORD', 'LHR,SFO,SAN', 'LHR,SFO,SAN,EWY', 'ORD,BGI', 'SAN', 'SAN,EWY,LHR', 'SAN,EWY,LHR,SFO,DSM', 'SAN,EWY,LHR,SFO,DSM,ORD,BGI', 'SAN,EWY,LHR,SFO,DSM,ORD,BGI,LGA', 'SAN,EWY,LHR,SFO,DSM,ORD,BGI,LGA', 'SFO,DSM', 'SFO,DSM,ORD,BGI', 'SFO,SAN', 'SFO,SAN,EWY,LHR', 'SIN,CDG,BUD', 'TLV,DEL,DOH']

# 转换为嵌套列表
nested_list = [item.split(',') for item in original_list]
# 去重
unique_nested = [list(tpl) for tpl in set(tuple(sublist) for sublist in nested_list)]
# 按长度+首元素排序
unique_nested.sort(key=lambda x: (len(x), x[0]))

print(unique_nested)

关键操作说明

  • split(','):核心转换操作,时间复杂度O(n*m)(n为原列表长度,m为字符串平均分割数),属于线性高效操作。
  • 集合去重:利用集合O(1)的查找特性,整体去重过程时间复杂度O(n)。
  • Timsort排序:Python内置的高效排序算法,在大多数场景下表现优于其他排序实现。

内容的提问来源于stack exchange,提问作者Mudit Atrey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:48:24