首先看一下昨天在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']
再看一个例子:
该例子更加明显的体现了groupby的数据处理能力,需要更加用心体会。
此时再回过头来看很高分答案,k for (k,_) in groupby(iterable),与key for key in groupby(iterable)是相同作用,对该答案有了更深的理解。