[英]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.defaultdict
和itertools.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.