首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算字符串出现的最快方法

计算字符串出现的最快方法
EN

Stack Overflow用户
提问于 2015-02-18 06:55:48
回答 2查看 76关注 0票数 1

我正在数一些从文本文件中得到的字符串。我已经这样做了,但我想知道是否有其他的方法,我可以很快找到。以下是我的代码:-

在这里,我首先找到所有的字符串,并将所有这些放在一个列表中。然后,我将创建一个唯一查询列表,然后在使用count方法查找计数之后。

input.txt

代码语言:javascript
复制
shoes
memory card
earphones
led bulb
mobile
earphones
led bulb
mobile

上面是我的输入文件。

代码语言:javascript
复制
new = []
with open("input.txt") as inf:
for line in inf:
    line = line.strip("\n")
    new.append(line)
unique = list(set(new))
for i in unique:
   cnt = new.count(i)
   print i,cnt

输出应该如下所示:

代码语言:javascript
复制
   mobile 2
   memory card 1
   led bulb 2
   shoes 1
   earphones 2 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-18 07:01:16

你可以用计数器:

代码语言:javascript
复制
from collections import Counter        

with open("input.txt") as inf:
   c = Counter(l.strip() for l in inf)

给予:

代码语言:javascript
复制
Counter({'led bulb': 2, 'earphones': 2, 'mobile': 2, 'memory card': 1, 'shoes': 1})

代码语言:javascript
复制
for k,v in c.items():
    print(k,v)  

这意味着:

代码语言:javascript
复制
memory card 1
mobile 2
earphones 2
led bulb 2
shoes 1  
票数 3
EN

Stack Overflow用户

发布于 2015-02-18 06:59:11

更好的办法是在他们使用字典的时候数一数:

代码语言:javascript
复制
count = {}
for L in open("input.txt"):
    count[L] = count.get(L, 0) + 1

最后你会得到一本字典,从行到它们各自的计数。

count方法是快速的,因为它是用C实现的,但是仍然必须扫描每个唯一字符串的完整列表,所以您的实现是O(n^2) (考虑所有字符串都不同的最坏情况)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28577734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档