['11A/B - FPC1', 'Tool Shelf', 'Repair', 'Tool Shelf', 'Tool Shelf', 'Repair', 'Repair', 'Tool Shelf', 'Tool Shelf', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair']这里的答案应该是3,因为“Repair”在列表中出现了两次,只有当前一项不等于“Repair”时才会计算。
['11A/B - FPC1', 'Tool Shelf', 'Repair', 'Tool Shelf', 'Tool Shelf', 'Tool Shelf', 'Tool Shelf', 'Tool Shelf', 'Tool Shelf', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair']这里的答案应该是2,因为“Repair”在列表中出现了两次,只有当前一项不等于“Repair”时才会计算。
发布于 2021-07-12 00:30:56
您可以在collections.Counter中使用itertools.groupby
import itertools as it, collections as cl
def count_unique(d):
return cl.Counter([a for a, _ in it.groupby(d)])
vals = ['11A/B - FPC1', 'Tool Shelf', 'Repair', 'Tool Shelf', 'Tool Shelf', 'Repair', 'Repair', 'Tool Shelf', 'Tool Shelf', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair']
vals1 = ['11A/B - FPC1', 'Tool Shelf', 'Repair', 'Tool Shelf', 'Tool Shelf', 'Tool Shelf', 'Tool Shelf', 'Tool Shelf', 'Tool Shelf', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair']
print(count_unique(vals)['Repair'])
print(count_unique(vals1)['Repair'])输出:
3
2发布于 2021-07-12 01:43:14
另一种解决方案是只使用列表索引,询问下一个元素是否等于前一个元素。我已经构建了一个函数,它接收术语和列表作为参数,并返回次数。这里的想法是将术语存储在count_list n个子列表中
def count_term(term, lst):
count_list = []
count_apparition = 0
for index in range(len(lst) - 1):
if lst[index] == term:
if lst[index] == lst[index+1]:
count_apparition += 1
else:
count_list.append([term])
if count_apparition > 0:
count_list.append([term])
# Using list1, count_list wil be [['Repair'], ['Repair'], ['Repair']]
# Using list2, count_list will be [['Repair'], ['Repair']]
return len(count_list)
print(count_term('Repair', list1))
print(count_term('Repair', list2))输出:
3
2https://stackoverflow.com/questions/68338078
复制相似问题