如何去除Python迭代器中的重复元素并按排序顺序输出?
去除Python迭代器重复元素并按排序输出
方法一:简洁实现(利用内置函数)
如果没有特殊限制,直接用set去重+sorted排序是最省事的方案,最后把结果转回迭代器即可:
it = iter(["black", "aqua", "aqua", "black", "black", "blue", "aqua", "blue", "fuchsia", "gray", "gray", "green", "green", "aqua", "lime", "lime"]) unique_sorted_it = iter(sorted(set(it))) # 验证结果 print(list(unique_sorted_it)) # 输出: ['aqua', 'black', 'blue', 'fuchsia', 'gray', 'green', 'lime']
注意:迭代器只能被遍历一次,转成set之后原迭代器就被耗尽了,无法再使用。
方法二:自定义迭代器(手动控制去重逻辑)
要是你想自己实现迭代器逻辑,或者不想依赖set,可以写一个自定义迭代器类,先把所有元素收集起来去重、排序,再逐个返回:
class UniqueSortedIterator: def __init__(self, iterator): seen = set() self.sorted_elements = [] # 遍历原迭代器,收集不重复元素 for elem in iterator: if elem not in seen: seen.add(elem) self.sorted_elements.append(elem) # 对元素排序 self.sorted_elements.sort() self.current_idx = 0 def __iter__(self): return self def __next__(self): if self.current_idx >= len(self.sorted_elements): raise StopIteration elem = self.sorted_elements[self.current_idx] self.current_idx += 1 return elem # 使用示例 it = iter(["black", "aqua", "aqua", "black", "black", "blue", "aqua", "blue", "fuchsia", "gray", "gray", "green", "green", "aqua", "lime", "lime"]) unique_sorted_it = UniqueSortedIterator(it) print(list(unique_sorted_it)) # 输出符合预期的排序去重结果
补充说明
因为要按排序顺序输出,必须先获取迭代器的所有元素——排序操作需要完整的数据集才能进行。如果原迭代器本身是有序的,那可以边遍历边去重,但本题输入是无序的,所以先收集所有元素是必要步骤。
内容的提问来源于stack exchange,提问作者Toothpick Anemone
相关产品推荐
相关产品推荐

