2014-10-24 2 views
0

У меня есть список элементов из двух строк и пробела. Я хотел бы подсчитать уникальное количество элементов и заказать список.Использование Python для подсчета уникальных элементов списка из двух строк, разделенных пробелом

plist = ('burleson both', 'the largemouth', 'the largemouth', 'a 19inch', 'his first') 

Так хотел бы получить следующее:

plist = [('the largemouth',2), ('burleson both', 1), ('a 19inch', 1), ('his first', 1)] 

Я попытался следующие, но это, кажется, создать несколько резервных списков:

unique_order_list = {} 
for item in plist: 
    unique_order_list[item] = plist.count(item) 
d = OrderedDict(sorted(unique_order_list.items(), key=operator.itemgetter(1), reverse=True)) 

Любая помощь приветствуется. Благодаря!

+2

Посмотрите на ['collections.Counter'] (https://docs.python.org/2/library/collections.html#collections.Counter). – jonrsharpe

+5

''the largemouth', 'for largemouth'' - Они оба одинаковы? – thefourtheye

+1

Можете ли вы сделать вопрос более ясным? вы говорите, что хотите подсчитать «уникальное количество элементов», что это значит? «largemouth» и «for largemouth» - это не одно и то же, и вы считаете их одинаковыми, но под «крупным». Нам нужен больше контекста. – LukeP

ответ

0

Это следует сделать это:.

plist = ('burleson both', 'the largemouth', 'the largemouth', 'a 19inch', 'his first') 
plist = [(x, plist.count(x)) for x in set(plist)] 
plist.sort(key=lambda x: x[1], reverse=True) 

Таким образом, мы используем set(plist) для создания набора (это список, в котором каждый уникальный элемент списка свойств появляется только один раз Затем мы используем функцию count сосчитать количество вхождений каждого уникального элемента в исходном plist.После этого мы сортируем по второму элементу (используя лямбда-функцию). Для параметра Reverse установлено значение True, так что сначала должен появиться элемент с большинством вхождений.

0

Это, кажется, о том, что вы ищете:

plist = ['burleson both', 'the largemouth', 'the largemouth', 'a 19inch', 'his first'] 
result = [] 
def index_finder(string,List): 
    answer = 0 
    for i in List: 
     if i != string: 
      answer+=1 
     else: 
      return answer 
def verifier(target,List): 
    for i in List: 
     if i[0] == target: 
      return True 
    return False 

for each in plist: 
    if verifier(each,result): 
     result[index_finder(each,plist)]= (each,result[index_finder(each,plist)][1] +1) 


    else: 
     result.append((each,1)) 
print result 

На стороне записки, кортежи неизменны и, как правило, не самый лучший инструмент для подсчета.

0

это:

import collections 

plist = ('burleson both', 'the largemouth', 'the largemouth', 'a 19inch', 'his first') 

counts = collections.Counter(plist) 

print counts # Counter({'the largemouth': 2, 'a 19inch': 1, 'burleson both': 1, 'his first': 1}) 

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

  • Нет связанных вопросов^_^