计算值彼此相邻出现的次数

Count the number of times values appear next to eachother

我有一个如下所示的列表:

['C', 'C', 'H', 'H', 'E', 'H', 'C', 'C', 'C', 'H', 'H', 'C', 'H', 'H', 'H', 'H', 'C']

而且我希望能够计算出一个、两个或三个 H 彼此相邻出现的次数,但不能超过这个次数。

所以在上面的例子中,HHH出现了0次,HH出现了两次,H出现了一次。

我尝试构建一个循环遍历当前位置和先前位置的 for 循环,但我觉得这太冗长了。

你可以这样做,使用 defaultdict and groupby:

from collections import defaultdict
from itertools import groupby

lst = ['C', 'C', 'H', 'H', 'E', 'H', 'C', 'C', 'C', 'H', 'H', 'C', 'H', 'H', 'H', 'H', 'C']

counts = defaultdict(int)
for _, group in groupby(lst):
    s = ''.join(group)
    if len(s) < 4:
        counts[s] += 1

print(counts)

输出

{'CC': 1, 'HH': 2, 'E': 1, 'H': 1, 'CCC': 1, 'C': 2}

想法是用 groupby 找到连续字母的 运行 并将计数存储在字典中,在本例中为 defaultdict。

也许是这样的?它打印所有相邻出现的数字 H。

X = ['C', 'C', 'H', 'H', 'E', 'H', 'C', 'C', 'C', 'H', 'H', 'C', 'H', 'H', 'H', 'H', 'C']
from collections import Counter
def cnt(X,c):
    i = 0
    count = Counter()
    temp = 0 #temporary variable to store counter
    while i < len(X):
        if X[i] != c:
            i += 1
        else:
            while i < len(X) and X[i] == c: #keep looping until end of array or different character
                temp += 1
                i += 1
            count[temp] += 1
            temp = 0
    print(count)
cnt(X,'H')

#Counter({2: 2, 1: 1, 4: 1})