有什么比python中的count()更好、更快地计算列表中特定元素的方法



我试图解决一个hackerbank问题,在这个问题中,我必须按顺序打印一个单词在列表中的出现次数。我的代码运行良好,但问题是在一些测试用例中,我的代码未能在时间限制内执行。我试了一些方法让它更快一点,稍后我会开始的。这是我的代码:

ar = [input() for i in listinput]
tup = tuple(dict.fromkeys(ar))
print(len(tup))
for i in tup:
print(str(ar.count(i))+" ", end='')

我试图让列表删除已经出现的元素:

ar = [input() for i in listinput]
tup = tuple(dict.fromkeys(ar))
print(len(tup))
for i in tup:
print(str(ar.count(i))+" ", end='')
ar.remove(i)

这让我得出结论,使用count((可能并没有那么有效。不过我还是不确定。基本上,我需要更改什么才能使代码执行得更快。

从集合中使用Counter((应该更快。链接到Python库-集合。(我不确定你是否必须实现hackerbank测试的计数器,或者你是否可以只使用一个库(

假设输入的格式如下。

ar = [1, 1, 1, 2, 3, 5, 5, 5, 9, 9, 9, 9, 9, 5] # or words

我们只需要使用计数器功能作为

import collections
ar = [1, 1, 1, 2, 3, 5, 5, 5, 9, 9, 9, 9, 9, 5]
print(collections.Counter(ar))

输出是计数器对象,

Counter({9: 5, 5: 4, 1: 3, 2: 1, 3: 1})

此外,还要注意顺序。您可能需要在原始列表上运行一个循环,每次遇到新单词时,都要将该单词用作字典中的键,并从计数器字典中设置该单词的值。希望速度更快。

最新更新