Python列表处理需求:移除重复元组后判断剩余列表是否为空
问题:处理元组列表并返回指定布尔值
我有一个包含一个或多个元组的列表,示例如下:
l = [('val_a', 100), ('val_b', 200), ('val_a', 100), ('val_b', 200)]
需要实现的功能:
- 移除列表中所有出现次数超过一次的元组
- 处理后若剩余列表为空,返回
True;否则返回False - 列表中元组顺序随机,无需保留原列表结构
示例说明
# 示例001:返回True l = [('val_a', 100), ('val_b', 200), ('val_a', 100), ('val_b', 200)] # 示例002:返回False l = [('val_a', 100), ('val_b', 200), ('val_a', 100), ('val_c', 300)] # 示例003:返回True l = [('val_a', 100), ('val_a', 100)] # 示例004:返回False l = [('val_a', 100)]
解决方案
可以利用collections.Counter统计每个元组的出现次数,再筛选出仅出现一次的元组,最后判断筛选结果是否为空。代码实现如下:
from collections import Counter def process_tuple_list(lst): tuple_counts = Counter(lst) # 筛选出只出现一次的元组 unique_items = [item for item in lst if tuple_counts[item] == 1] # 判断筛选后的列表是否为空 return len(unique_items) == 0
测试验证
分别代入示例测试:
# 测试示例001 l1 = [('val_a', 100), ('val_b', 200), ('val_a', 100), ('val_b', 200)] print(process_tuple_list(l1)) # 输出: True # 测试示例002 l2 = [('val_a', 100), ('val_b', 200), ('val_a', 100), ('val_c', 300)] print(process_tuple_list(l2)) # 输出: False # 测试示例003 l3 = [('val_a', 100), ('val_a', 100)] print(process_tuple_list(l3)) # 输出: True # 测试示例004 l4 = [('val_a', 100)] print(process_tuple_list(l4)) # 输出: False
思路说明
- 使用
Counter统计列表中每个元组的出现次数,高效完成频次统计 - 通过列表推导式筛选出所有出现次数为1的元组
- 检查筛选后的列表长度是否为0,返回对应的布尔值
内容的提问来源于stack exchange,提问作者finethen
相关产品推荐
相关产品推荐

