📜  Python|列表中的连续元素分组(1)

📅  最后修改于: 2023-12-03 14:46:26.631000             🧑  作者: Mango

Python | 列表中的连续元素分组

有时候,我们需要将列表中的连续元素按照一定规则进行分组,以便在处理这些元素时更加方便。本文将介绍如何使用 Python 对列表中的连续元素进行分组。

方法一:使用 itertools 模块

Python 的 itertools 模块提供了一个名为 groupby() 的函数,该函数可以对迭代器进行分组。我们可以使用该函数对列表中的连续元素进行分组。

from itertools import groupby

lst = ['A', 'B', 'B', 'C', 'C', 'A', 'D', 'E', 'E', 'E']

groups = groupby(lst)

for key, group in groups:
    print(key, list(group))

输出结果为:

A ['A']
B ['B', 'B']
C ['C', 'C']
A ['A']
D ['D']
E ['E', 'E', 'E']

groupby() 函数返回的是一个迭代器,其中的每个元素都是一个键值对 (key, group),其中 key 表示当前分组的键,group 是一个迭代器,其中包含了当前分组的所有元素。

方法二:使用 for 循环

除了使用 itertools 模块的 groupby() 函数外,我们还可以使用 for 循环扫描列表中的元素,以实现对连续元素的分组。

lst = ['A', 'B', 'B', 'C', 'C', 'A', 'D', 'E', 'E', 'E']

result = []

for i, item in enumerate(lst):
    if i == 0 or item != lst[i-1]:
        result.append([])
    result[-1].append(item)

print(result)

输出结果为:

[['A'], ['B', 'B'], ['C', 'C'], ['A'], ['D'], ['E', 'E', 'E']]

该方法的思路是使用一个空列表 result 来存储分组结果。从头到尾扫描列表中的每个元素,如果该元素与前一个元素不同,则创建一个新的空列表,将该元素加入到新列表中,并将新列表加入到 result 中;否则,直接将该元素加入到最后一个列表中。

总结

本文介绍了两种方法来对列表中的连续元素进行分组。使用 itertools 模块的 groupby() 函数可以更加简洁地实现该功能,而使用 for 循环实现的方法则更加灵活,可以根据具体的需求进行定制。