gpt4 book ai didi

python - 如何高效计算列表中元素非连续出现的次数?

转载 作者:行者123 更新时间:2023-12-02 01:06:51 25 4
gpt4 key购买 nike

我试图找出某个元素在列表中非连续出现的次数。

我的意思是:

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} ")

我得到了所需的输出,但我想知道是否有更优雅,尤其是更快的方法。

最佳答案

试试这个:

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]
sr = pd.Series(row, name = "x")
sr[sr.groupby(sr.shift(-1).bfill(0).ne(sr)).transform('cumcount')==1].value_counts()

输出:

10    3
12 2
11 2

第一列是x值,第二列是序列数。

更紧凑、更快的方式:

from  itertools import groupby    
pd.Series([k for k, g in groupby(row)]).value_counts()

另一个解决方案:

np.unique([k for k, g in groupby(row)], return_counts=True)

结果:

(array([10, 11, 12]), array([3, 2, 2], dtype=int64))

或者使用np.bincount:

np.bincount([k for k, g in groupby(row)])

但输出会略有不同:

array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 2], dtype=int64)

关于python - 如何高效计算列表中元素非连续出现的次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60510224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com