簡體   English   中英

在列表中獲取相同值的序列並計算序列中的元素

[英]Get sequences of same values within list and count elements within sequences

我想從列表中查找具有相同值的序列中的值量:

list = ['A','A','A','B','B','C','A','A']

結果應如下所示:

result_dic = {A: [3,2], B: [2], C: [1]}

我不只是想要列表中不同值的計數,正如您在A的結果中看到的那樣。

collections.defaultdictitertools.groupby

from itertools import groupby
from collections import defaultdict

listy = ['A','A','A','B','B','C','A','A']

d = defaultdict(list)

for k, v in groupby(listy):
  d[k].append(len([*v]))

d

defaultdict(list, {'A': [3, 2], 'B': [2], 'C': [1]})

  • groupby將遍歷所有可迭代和連續的事物。

     [(k, [*v]) for k, v in groupby(listy)] [('A', ['A', 'A', 'A']), ('B', ['B', 'B']), ('C', ['C']), ('A', ['A', 'A'])] 
  • 因此,我遍歷這些結果並將每個分組對象的長度附加到defaultdict的值上

我建議使用defaultdict並遍歷列表。

from collections import defaultdict

sample = ['A','A','A','B','B','C','A','A']

result_dic = defaultdict(list)
last_letter = None
num = 0

for l in sample:
    if last_letter == l or last_letter is None:
        num += 1
    else:
        result_dic[last_letter].append(num)

編輯這是我的方法,盡管我會看一下@piRSquared的答案,因為他們足夠熱衷於包括groupby 干得好!

我建議遍歷列表。

result_dic = {}
old_word = ''

for word in list:
    if not word in result_dic:
        d[word] = [1]
    elif word == old_word:
        result_dic[word][-1] += 1
    else:
        result_dic[word].append(1)
    old_word = word

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM