Python groupby()切分迭代器

  • Post category:Python

当我们需要对一个可迭代对象进行分组操作时,可以使用Python的groupby()方法。该方法能够将迭代器中连续的相同元素分为同一组,并返回一个由(key, group_iterator)组成的迭代器,其中key为元素值,group_iterator为迭代器对象。

下面是groupby()的使用方法:

from itertools import groupby

# 创建一个列表
numbers = [1,1,2,2,3,3,4,4,5,5]

# 对列表进行分组操作
grouped_numbers = groupby(numbers)

# 打印分组后的结果
for key, group in grouped_numbers:
    print(key, list(group))

输出结果:

1 [1, 1]
2 [2, 2]
3 [3, 3]
4 [4, 4]
5 [5, 5]

上述代码中,我们首先导入Python内置的itertools模块,并从中导入groupby()方法。接着,我们定义了一个包含重复元素的列表numbers,然后使用groupby()方法对其进行分组操作。最后,我们使用for循环遍历分组后的结果,并打印每个分组的key和group。

需要注意的是,groupby()方法对可迭代的对象进行分组时,要求元素是按顺序排列的。如果元素没有排序,则需要在调用groupby()方法前进行排序操作。

下面是另一个groupby()方法的示例:

from itertools import groupby

# 创建一个包含字符串的列表
words = ["apple", "art", "book", "back", "cat", "cook", "car", "class"]

# 对列表进行分组操作
grouped_words = groupby(words, key=lambda x: x[0])

# 打印分组后的结果
for key, group in grouped_words:
    print(key, list(group))

输出结果:

a ['apple', 'art']
b ['book', 'back']
c ['cat', 'cook', 'car', 'class']

上述代码中,我们定义了一个包含字符串的列表words,然后使用groupby()方法对其进行分组操作。这次我们设定了一个key参数,指定了分组的依据,即按照每个字符串的第一个字母进行分组。最后,我们使用for循环遍历分组后的结果,并打印每个分组的key和group。

需要注意的是,groupby()方法返回的是一个生成器对象,因此在使用分组结果时需要注意代码的执行顺序,否则可能会得到意想不到的结果。