请参阅第10.1.2节中的 Python 文档。Itertools 食谱包含以下食谱:
def unique_justseen(iterable, key=None): "List unique elements, preserving order. Remember only the element just seen." # unique_justseen('AAAABBBCCDAABBB') --> A B C D A B # unique_justseen('ABBCcAD', str.lower) --> A B C A D return map(next, map(operator.itemgetter(1), itertools.groupby(iterable, key)))
在我看来,这是不必要的复杂,因为命令return可以这样写:
return map(operator.itemgetter(0), itertools.groupby(iterable, key))
这很好用,但也许我错过了一些东西,并且有一个iterable“官方”版本可以正常工作的例子,但我的没有。
您是否知道这种情况,或者我的方法似乎正确?
变体
map(operator.itemgetter(0), itertools.groupby(iterable, key))是不正确的,因为你会在使用key函数的时候返回得到的key值。也就是说,执行时,map(operator.itemgetter(0), itertools.groupby('AabBCC', str.lower))您将得到['a', 'b', 'c']与键对应的结果,但不会与遇到的第一个元素对应。执行
map(next, map(operator.itemgetter(1), itertools.groupby('AabBCC', str.lower)))我们得到['A', 'b', 'C']对应于组中第一个遇到的元素的内容。