我想计算一个大列表包含特定顺序元素的次数。例如,如果我有元素 [1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5 ]
并且我想知道有多少次 [1,2,3]
彼此相邻(在这种情况下答案是 4
)。
我正在考虑检查数字“3”的索引(所以目前它会返回 [2,7,12,17]
。然后我会遍历该列表,将元素放入列表中描述的位置并检查它前面的两个位置。如果它们匹配“1”和“2”,则将计数器加 1 并继续寻找。我相信这个解决方案不是很有效并且看起来不太好,会不会是更好的解决方案?
最佳答案
这是一个适用于任何大小的子序列和任何类型的元素的通用解决方案。它也非常节省空间,因为它只对迭代器进行操作。
from itertools import islice
def count(lst, seq):
it = zip(*(islice(lst, i, None) for i in range(len(seq))))
seq = tuple(seq)
return sum(x == seq for x in it)
In [4]: count(l, (1, 2, 3))
Out[4]: 4
想法是在 lst
上创建一个宽度为 len(seq)
的滑动窗口迭代器,并计算等于 tuple(seq) 的元组数
。这意味着 count
也计算重叠匹配:
In [5]: count('aaa', 'aa')
Out[5]: 2
关于python - 计算列表python中的列表出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42456425/