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

如何统计嵌套列表中的唯一子列表数量?(子列表长度2-3000)

计算嵌套列表中唯一子列表的数量

给定一个嵌套列表(示例如下),需要统计其中唯一子列表的数量:

list1 = [['banana', 'apple', 'orange', 'tomato'], ['apple', 'orange', 'tomato', 'banana'], ['orange', 'tomato', 'banana', 'apple'], ['banana', 'apple', 'orange', 'tomato'], ['apple', 'orange', 'tomato', 'banana']]

示例中共有3个唯一子列表。

方法1:利用集合(Set)去重

因为列表是不可哈希的,无法直接存入集合,所以先将每个子列表转换为可哈希的元组(tuple),再借助集合自动去重的特性,最后统计集合的长度即可得到唯一子列表的数量。

代码示例:

list1 = [['banana', 'apple', 'orange', 'tomato'], ['apple', 'orange', 'tomato', 'banana'], ['orange', 'tomato', 'banana', 'apple'], ['banana', 'apple', 'orange', 'tomato'], ['apple', 'orange', 'tomato', 'banana']]

# 生成包含所有子列表元组的集合
unique_tuples = set(tuple(sublist) for sublist in list1)
# 统计唯一子列表数量
unique_count = len(unique_tuples)

print(unique_count)  # 输出:3

这种方法高效且简洁,时间复杂度为O(n)(n为嵌套列表的元素总数),即使子列表长度达到3000也能稳定运行,因为元组转换和哈希计算在Python中经过了优化。

方法2:手动遍历去重

如果不想使用集合,可以手动维护一个记录已出现子列表的容器,遍历每个子列表时检查是否已存在,不存在则加入容器,最后统计容器长度。

代码示例:

list1 = [['banana', 'apple', 'orange', 'tomato'], ['apple', 'orange', 'tomato', 'banana'], ['orange', 'tomato', 'banana', 'apple'], ['banana', 'apple', 'orange', 'tomato'], ['apple', 'orange', 'tomato', 'banana']]

unique_sublists = []
for sublist in list1:
    if sublist not in unique_sublists:
        unique_sublists.append(sublist)

unique_count = len(unique_sublists)
print(unique_count)  # 输出:3

注意:这种方法的时间复杂度为O(n²),当嵌套列表包含大量元素时,性能会远低于集合方法,仅适合小规模数据场景。

关键注意点

  • 子列表中的元素必须是可哈希类型(如字符串、数字),若子列表包含不可哈希元素(如嵌套子列表),则需要先处理这些元素,或自定义哈希逻辑。
  • 对于超长子列表(长度3000),优先选择集合方法,避免手动遍历带来的性能损耗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 03:58:38