如何有效地计算列表中元素的非连续出现次数?

问题描述 投票:1回答:2

因此,我试图找出某个元素不连续出现在列表中的次数。我的意思是:

list = [10,10,10,11,12,10,12,14,10,10,10]
element_searched = 10

=> expected_output = 3

所以这意味着10在列表中出现3次。

到目前为止,我的代码似乎仍然有效:

elements = [11, 10, 12]
row = [10,10,10,10,10,10,10,10,10,11,11,11,11,11,10,10,10,10,12,12,12,12,12,11,11,11,11,12,12,12,12,10]

element_on = False
for element in elements:
    sequence = 0
    for i in range(len(row)):
        if element == row[i] and element_on==False:
            sequence += 1
            element_on = True
        elif element==row[i] and element_on==True:
            pass
        elif element != row[i] and element_on==True:
            element_on = False
        #
        elif element != row[i] and element_on == False:
            element_on = False
        #
    print(f"For element {element} the number ob sequences is: {sequence} ")

我正在获得所需的输出,但是我想知道是否有一种更优雅的方法,尤其是一种[[更快的方法。

python list performance list-comprehension python-performance
2个回答
0
投票
我认为这就是您想要的。按类似元素对列表进行分组,然后对计数求和

import itertools element_searched = 10 expected_output = sum([i.count(element_searched) for i in itertools.groupby(list)])

3

0
投票
我会用一个简单的字典:

row = [10,10,10,10,10,10,10,10,10,11,11,11,11,11,10,10,10,10,12,12,12,12,12,11,11,11,11,12,12,12,12,10] counter = {} for item in row: counter[item] = counter.get(item, 0) + 1 print (counter)

© www.soinside.com 2019 - 2024. All rights reserved.