itertools模块之groupby的使用
将“aaaabbbbccccaaaa”按照字母出现的顺序进行快速分组
from itertools import groupby
m = groupby("aaaabbbbccccaaaa")
for k, v in m:
print(k, len(list(v)))
# a 4
# b 4
# c 4
# a 4
groupby支持传入两个参数,参数1是需要迭代的对象,参数2是函数key代表分组依据,为none则表示使用迭代对象中的元素作为分组依据
from itertools import groupby
m = groupby("aaaabbbbccccaaaa", lambda x: x == 'a')
for k, v in m:
print(k, list(v))
# True ['a', 'a', 'a', 'a']
# False ['b', 'b', 'b', 'b', 'c', 'c', 'c', 'c']
# True ['a', 'a', 'a', 'a']
itertools模块之islice的使用
itertools.islice(iterable, start, stop[, step])
可以返回从迭代器中的start位置到stop位置的元素。如果stop为None,则一直迭代到最后位置。
from itertools import islice
print([x for x in islice('ABCDEFG', 2, 4)])
print([x for x in islice('ABCDEFG', 2, None)])
print([x for x in islice('ABCDEFG', 0, None, 2)])
# ['C', 'D']
# ['C', 'D', 'E', 'F', 'G']
# ['A', 'C', 'E', 'G']
groupby+islice使用
from itertools import groupby, islice
my_list = ["a", 2, 3, 3,
"a", "a", 2, 2,
"a", "a", "a", "a",
4, 5, "a", "a"]
# 获取元素为 "a" 的在每四个元素中出现的个数
print([sum(1 for _ in islice(g, 4)) for k, g in groupby(my_list) if k == "a"]) # [1, 2, 4, 2]
# 判断是否存在 三个元素中 存在3个元素都为 "a"的情况
print(any(sum(1 for _ in islice(g, 3)) == 3 for k, g in groupby(my_list) if "a")) # True