2015-02-18 3 views
1

Я подсчитываю строку, которую я получаю из текстового файла. Я уже это сделал, но я хочу знать, есть ли другой способ, который я могу найти быстро. Под моим кодом:Самый быстрый способ подсчета пробела строки

Здесь сначала я нахожу всю строку и помещаю все это в список. Затем я составляю список уникального запроса, после того как я использую метод count, чтобы найти счет.

input.txt

shoes 
memory card 
earphones 
led bulb 
mobile 
earphones 
led bulb 
mobile 

выше мой входной файл.

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 

и вывод должен выглядеть следующим образом:

mobile 2 
    memory card 1 
    led bulb 2 
    shoes 1 
    earphones 2 
+0

Пример входных данных? у вас есть одно слово в каждой строке или что-то в этом роде? – Marcin

+0

Возможно дубликат http://stackoverflow.com/questions/893417/item-frequency-count-in-python Проверьте это для других решений, таких как collection.defaultdict или itertools.groupby. –

ответ

3

Вы можете использовать счетчик:

from collections import Counter   

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

Дает:

Counter({'led bulb': 2, 'earphones': 2, 'mobile': 2, 'memory card': 1, 'shoes': 1}) 

или

for k,v in c.items(): 
    print(k,v) 

, который дает:

memory card 1 
mobile 2 
earphones 2 
led bulb 2 
shoes 1 
+0

привет @ Марцин! с вашим ответом: 'open (" input.txt ") как inf: c = Counter (l.strip() для l in inf)' 'print (c)' почему у меня есть счетчик слов при печати (c)? 'Counter ({'joyeux': 4, 'amour': 2, 'hello': 1})' –

+0

Что значит? не то, что вы хотите? если нет, укажите пример ваших входных данных и ожидаемого результата, иначе игра-догадка. – Marcin

+0

@Marcin теперь прочитал вопрос, я переписал это. –

1

Гораздо лучше было бы просто считать их, как они приходят в использовании словаря:

count = {} 
for L in open("input.txt"): 
    count[L] = count.get(L, 0) + 1 

и вы в конечном итоге со словарем от строк до их соответствующих значений.

Метод count выполняется быстро, потому что он реализован на C, но все же должен сканировать полный список для каждой уникальной строки, поэтому ваша реализация - O (n^2) (рассмотрим наихудший случай наличия всех строк).

Смежные вопросы