2014-11-29 2 views
-2

У меня есть эта функция, которая возвращает список значений и значений для целых значений. Я хотел бы изменить это, чтобы возвращать значения и значения строк, поскольку у меня возникают проблемы с реализацией. Он работает для целочисленных значений, но не для строк.Частота подсчета для строк

def frequencies(xs): 
ys = sorted(xs) 
values, count = [], [] 
for y in ys: 
    if y not in values: 
     values.append(y) 
     count.append(1) 
    else: 
     count[-1] += 1 
return values, count 
+3

Пожалуйста, объясните, что "возникли проблемы" означает. –

+0

Я могу передать столбец с поплавками, и он возвращает два списка, причем один из них является списком значений, а другой - списком количества раз, когда это значение появляется в столбце. Я хочу иметь возможность делать то же самое для строк. значения = [17,0, 18,0, 19,0] count = [328, 447, 590]. Например, мне нужны значения = ['red', 'blue', 'green'] count = [1, 3, 9] – user3318660

+0

Отлично работает для меня: 'frequency ([1,2,3,2,3, 4,5,3,4,3,4,2,1,2,5]) 'дает' ([1, 2, 3, 4, 5], [2, 4, 4, 3, 2]) ' , а «частоты» («1», «2», «3», «2», «3», «4», «5», «3», «4», «3», «4», '2', '1', '2', '5']) 'дает' (['1', '2', '3', '4', '5'], [2, 4, 4, 3, 2]) ' –

ответ

0

Зачем изобретать велосипед, а не использовать Counter? Насколько я понимаю, вы пытаетесь добиться именно того, что делает Counter.

from collections import Counter 

a = Counter([1,2,3,2,3,4,5,3,4,3,4,2,1,2,5]) 
print(a.keys(), a.values()) 


b = Counter(["1","2","3","2","3","4","5","3","4",'3','4','2','1','2','5']) 
print(b.keys(), b.values()) 

Дает:

dict_keys([1, 2, 3, 4, 5]) dict_values([2, 4, 4, 3, 2]) 
dict_keys(['4', '2', '3', '1', '5']) dict_values([3, 4, 4, 2, 2]) 
+0

Это возвращает [1,1,1,1] [nan, nan, nan, nan] – user3318660

+0

@ user3318660 Ваш результат для какого ввода? Строки? – Marcin

+0

У меня есть txt-файл, и я просто перехожу в столбец из этого файла таблицы – user3318660

1

использованием itertools.groupby:

>>> import itertools 
>>> a = [1,2,3,4,5,6,2,3,4,5,3,7,8,4,5,6,3] 
>>> [ [x,len(list(y))] for x,y in itertools.groupby(sorted(a))] # if you want list 
[[1, 1], [2, 2], [3, 4], [4, 3], [5, 3], [6, 2], [7, 1], [8, 1]] 
>>> {x:len(list(y)) for x,y in itertools.groupby(sorted(a))}  # if you want dictionary 
{1: 1, 2: 2, 3: 4, 4: 3, 5: 3, 6: 2, 7: 1, 8: 1} 
Смежные вопросы