Python中的迭代器是一種非常方便的工具,通過它們可以遍歷很多對象,比如列表、字典、文件等等。但是,在某些情況下,我們希望將迭代器按照一定規則分組,比如將相鄰的元素分為一組,或者將某些指定條件下的元素分為一組等等。這時,我們就可以使用Python中的itertools模塊中的groupby()函數。
import itertools data = [1, 1, 2, 3, 3, 1, 5, 5, 5] groups = itertools.groupby(data) for key, group in groups: print(key, list(group))
上面的代碼中,我們首先導入了itertools模塊,然后定義了一個列表data,其中包含了一些整數。接著,我們使用itertools模塊中的groupby()函數對列表data進行分組,將相鄰的相同元素分為一組。最后,我們使用for循環遍歷每個分組,并將其打印出來。
運行上面的代碼,可以得到如下結果:
1 [1, 1] 2 [2] 3 [3, 3] 1 [1] 5 [5, 5, 5]
可以看到,通過groupby()函數,我們成功將相鄰的相同元素分為了一組,并且給每組分配了一個key值(即相同元素的值)。
除了上面的例子,我們還可以通過自定義一個函數來實現更復雜的分組操作。比如,下面的代碼可以將列表中的奇偶數分別分成一組:
import itertools def is_even(n): return n % 2 == 0 data = [1, 2, 3, 4, 5, 6, 7, 8, 9] groups = itertools.groupby(data, is_even) for key, group in groups: print(key, list(group))
上面的代碼中,我們首先定義了一個函數is_even(),用來檢查一個數是否為偶數。然后,我們定義了一個列表data,其中包含了一些整數。接著,我們使用itertools模塊中的groupby()函數對列表data進行分組,將偶數和奇數分別分為一組。最后,我們使用for循環遍歷每個分組,并將其打印出來。
運行上面的代碼,可以得到如下結果:
False [1, 3, 5, 7, 9] True [2, 4, 6, 8]
可以看到,通過groupby()函數,我們成功將列表中的奇偶數分別分為了一組,并且給每組分配了一個key值。