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

如何去除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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 22:05:07