用法:
itertools.groupby(iterable, key=None)
创建一个从
iterable
返回连续键和组的迭代器。key
是一个计算每个元素的键值的函数。如果未指定或为None
,则key
默认为恒等函数并返回未更改的元素。通常,iterable 需要已经在相同的 key 函数上排序。groupby()
的操作类似于Unix中的uniq
过滤器。每次键函数的值发生变化时,它都会生成一个中断或新组(这就是为什么通常需要使用相同的键函数对数据进行排序的原因)。这种行为与 SQL 的 GROUP BY 不同,后者聚合公共元素,而不管它们的输入顺序如何。返回的组本身就是一个迭代器,它与
groupby()
共享底层迭代。因为源是共享的,所以当groupby()
对象被推进时,前一个组不再可见。因此,如果以后需要该数据,则应将其存储为列表:groups = [] uniquekeys = [] data = sorted(data, key=keyfunc) for k, g in groupby(data, keyfunc): groups.append(list(g)) # Store group iterator as a list uniquekeys.append(k)
groupby()
大致相当于:class groupby: # [k for k, g in groupby('AAAABBBCCDAABBB')] --> A B C D A B # [list(g) for k, g in groupby('AAAABBBCCD')] --> AAAA BBB CC D def __init__(self, iterable, key=None): if key is None: key = lambda x: x self.keyfunc = key self.it = iter(iterable) self.tgtkey = self.currkey = self.currvalue = object() def __iter__(self): return self def __next__(self): self.id = object() while self.currkey == self.tgtkey: self.currvalue = next(self.it) # Exit on StopIteration self.currkey = self.keyfunc(self.currvalue) self.tgtkey = self.currkey return (self.currkey, self._grouper(self.tgtkey, self.id)) def _grouper(self, tgtkey, id): while self.id is id and self.currkey == tgtkey: yield self.currvalue try: self.currvalue = next(self.it) except StopIteration: return self.currkey = self.keyfunc(self.currvalue)
相关用法
- Python itertools.groupby()用法及代码示例
- Python itertools.takewhile用法及代码示例
- Python itertools.compress用法及代码示例
- Python itertools.dropwhile用法及代码示例
- Python itertools.repeat用法及代码示例
- Python itertools.combinations_with_replacement用法及代码示例
- Python itertools.repeat()用法及代码示例
- Python itertools.count用法及代码示例
- Python itertools.starmap用法及代码示例
- Python itertools.filterfalse用法及代码示例
- Python itertools.chain.from_iterable用法及代码示例
- Python itertools.zip_longest用法及代码示例
- Python itertools.accumulate用法及代码示例
- Python itertools.tee用法及代码示例
- Python itertools.combinations用法及代码示例
- Python itertools.permutations用法及代码示例
- Python itertools.product用法及代码示例
- Python itertools.chain用法及代码示例
- Python itertools.cycle用法及代码示例
- Python itertools.islice用法及代码示例
注:本文由纯净天空筛选整理自python.org大神的英文原创作品 itertools.groupby。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。