python - 计算列表python中的列表出现次数

标签 python

我想计算一个大列表包含特定顺序元素的次数。例如,如果我有元素 [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/

相关文章:

interpreter - 更改对象在解释器中的显示方式

python - 设计代码以在 Django/Python 应用程序中正确处理错误?

python - scikit-learn 中 SVC 分类器的预测错误?

python - Tensorflow - 使用批处理进行预测

python - hist 中密度为 True 的 numpy.histogram 的维度

python - 如何在 Flask 中捕获和读取传入 HTTP 请求的 header ?

python - pandas read_csv 中的编解码器问题

python - 无法理解uniform_filter1d()函数的工作原理(从scipy.ndimage.filters导入)

python - 如何避免 Django 模型中的日期重叠?

python - 如何限制 TFLearn 中的 GPU 内存使用?