Pythonic 方法来计算列表中特定邻居的数量

标签 python python-3.x list counting

我有一个 list 。例如:

[0, 0, 1, 0, 0, 1, 0]

我想知道计算 1 -> 0 转换的最有效方法是什么。例如,在本例中,答案是 2(在 2-3 和 5-6 位置)

我尝试了以下方法:

 stat=[0, 0, 1, 0, 0, 1, 0]
 pair1=stat[:-1]
 pair2=stat[1:]
 result=len([i for i in zip(pair1, pair2) if i==(1,0)])

我想知道是否有更好的方法

最佳答案

这里有3种方法:

from itertools import islice
import numpy as np

lst = [0, 0, 1, 0, 0, 1, 0]

res1 = sum(i - j == 1 for i, j in zip(lst, lst[1:]))  # 2

res2 = sum(i - j == 1 for i, j in zip(lst, islice(lst, 1, None)))  # 2

res3 = np.sum(np.diff(lst) == -1)  # 2

说明

  1. 第一种方法利用带有生成表达式的 sumzip 来循环成对元素。
  2. 第二种方法与第一种方法类似,但性能更好,因为它避免了显式构建第二个列表。
  3. 第三种方法利用第三方 numpy 库,是一种矢量化方法。

关于Pythonic 方法来计算列表中特定邻居的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49680611/

相关文章:

python - 模拟 datetime.now();模拟对象不被识别为类

python - 使用 Flask 流式传输视频文件

python - 为 pyenv + virtualenv 生成 python3-config

python - 基准 Python 程序

java - 以所有可能的方式将列表拆分为两个子列表

python - 减少 Google OR-tools python 脚本的运行时间(使用 Google Cloud)

python - 如何改进Python中的for循环迭代

java - 排序列表字母表java?

r - 基于命名列表对 data.table 进行子集化

python - eval、exec 和 compile 之间有什么区别?