辨識清單中的連續數位群組是各種程式場景中出現的常見任務。
幸運的是,Python 的內建函數和模組提供了優雅的這個問題的解決方案。一種方法利用 groupby() 函數和 lambda 表達式:
from itertools import groupby data = [2, 3, 4, 5, 12, 13, 14, 15, 16, 17] for k, g in groupby(enumerate(data), lambda (i, x): i - x): print(map(itemgetter(1), g))
此程式碼段根據索引和值之間的差異對連續數字進行分組,確保每個組中的元素是連續的。
如果想要的輸出是表示連續數字範圍的元組列表,可以進行以下修改:
ranges = [] for k, g in groupby(enumerate(data), lambda (i, x): i - x): group = map(itemgetter(1), g) ranges.append((group[0], group[-1]))
或者,可以使用循環和列表理解來實現自定義解決方案:
ranges = [] for i in range(len(data)): if i == len(data) - 1 or data[i] + 1 != data[i + 1]: ranges.append((data[i], data[i])) else: start = i while i + 1 < len(data) and data[i] + 1 == data[i + 1]: i += 1 ranges.append((data[start], data[i]))
此方法迭代列表,識別每個連續組的開始和結束索引,並將它們附加到範圍列表中。
以上是如何辨識 Python 清單中的連續數位組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!