代码之家  ›  专栏  ›  技术社区  ›  Bogaso

估计列表中连续配对的数量

  •  1
  • Bogaso  · 技术社区  · 1 年前

    我有一份清单 0/1 值,即。

    MyList = [0,0,0,0,1,0,1,0,0,0,1,1,0]
    

    我的目标是2计算像 (0,0) and (0,1)

    在上面的例子中,有5对 (0,0) (即第一、第二、第三和第八、第九位置),以及 (0,1) 存在3个这样的事件。

    有什么功能/方法可以实现这一点吗?

    2 回复  |  直到 1 年前
        1
  •  0
  •   Andrej Kesely    1 年前

    使用 collections.Counter :

    from collections import Counter
    
    lst = [0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0]
    
    c = Counter(zip(lst, lst[1:]))
    
    print(f"{c[(0, 0)]=}")
    print(f"{c[(0, 1)]=}")
    

    打印:

    c[(0, 0)]=5
    c[(0, 1)]=3
    
        2
  •  0
  •   Maria K    1 年前

    您可以使用 zip 并且它们检查这些对是否等于目标对:

    def calculate_pairs(lst, pair=(0, 0)):
        return sum((i, j) == pair for i, j in zip(MyList[:-1], MyList[1:]))
    
    MyList = [0,0,0,0,1,0,1,0,0,0,1,1,0]
    
    calculate_pairs(MyList, pair=(0, 0))
    >> 5
    calculate_pairs(MyList, pair=(0, 1))
    >> 3