一日一技:使用 itertools.groupby 對已排序整數列表中的連續(xù)整數進行分組
欄目介紹
本欄目主要介紹 Python 的日常使用小技巧,希望能幫助大家利用一些碎片時間,掌握提高日常效率的方法~
使用 itertools.groupby 對已排序整數列表中的連續(xù)整數進行分組
這次我們來看一個使用 itertools.groupby 的例子。
場景:我們有一個包含已排序整數的列表,我們想要將連續(xù)的整數分組。
原始已排序整數列表:
numbers = [1, 2, 3, 6, 7, 8, 11, 12, 13, 14, 17, 18, 21, 22, 23]
不使用 itertools.groupby 的方法:
groups = []
current_group = [numbers[0]]
for i in range(1, len(numbers)):
if numbers[i] == numbers[i - 1] + 1:
current_group.append(numbers[i])
else:
groups.append(current_group)
current_group = [numbers[i]]
groups.append(current_group)
print(groups)
使用 itertools.groupby 的方法:
from itertools import groupby
groups = []
for k, g in groupby(enumerate(numbers), lambda x: x[1] - x[0]):
groups.append([item[1] for item in g])
print(groups)
在這個例子中,我們使用了 itertools.groupby 函數,它可以幫助我們輕松地根據某個條件對已排序的序列進行分組。這使得代碼更加簡潔。
itertools.groupby 函數接受兩個參數:一個已排序的可迭代對象(如列表)和一個可選的鍵函數。它返回一個迭代器,該迭代器產生由鍵函數產生的唯一鍵和對應的元素組成的元組。在這個例子中,我們使用了 lambda x: x[1] - x[0] 作為鍵函數,將具有相同差值的連續(xù)整數分為一組。
在使用 itertools.groupby 時,需要確保代碼仍具有可讀性,避免在復雜情況下使用這個函數導致代碼難以理解。同時,請注意,itertools.groupby 函數要求輸入的可迭代對象是已排序的。
評論
圖片
表情
