用法:
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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。