itertools中groupby的学习

首先看一下昨天在codewars上遇到的一题:
Unique In Order
Implement the function unique_in_order which takes as argument a sequence and returns a list of items without any elements with the same value next to each other and preserving the original order of elements.
For example:

unique_in_order('AAAABBBCCDAABBB') == ['A', 'B', 'C', 'D', 'A', 'B']
unique_in_order('ABBCcAD')         == ['A', 'B', 'C', 'c', 'A', 'D']
unique_in_order([1,2,2,3,3])       == [1,2,3]

再来看一下高分答案:

from itertools import groupby
def unique_in_order(iterable):
	return [k for (k, _) in groupby(iterable)]

groupby方法在itertools模块中,适用于数据处理等方面。

itertools.groupby(iterable,key=None)

这个函数的有两个参数,第一个是可迭代对象,第二个是key。
groupby可以将相邻的重复元素挑出来放在一起:

for key,group in itertools.groupby('AAAABBBBCCAA'):
	print(key,list(group)


输出如下:
A ['A', 'A', 'A', 'A']
B ['B', 'B', 'B', 'B']
C ['C', 'C']
A ['A', 'A']

再看一个例子:
itertools中groupby的学习_第1张图片
该例子更加明显的体现了groupby的数据处理能力,需要更加用心体会。
此时再回过头来看很高分答案,k for (k,_) in groupby(iterable),与key for key in groupby(iterable)是相同作用,对该答案有了更深的理解。

你可能感兴趣的:(point)