如何统计嵌套列表中的唯一子列表数量?(子列表长度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
相关产品推荐
相关产品推荐

