2014-08-31 2 views
-1

У меня есть несколько тысяч строк данных, которая выглядит следующим образом:Как группировать и подсчитывать случайные строки?

TTGGGG**TCTCCAT** 
TTCTTC**TCTCCAT** 
TTGGGG**TCTCCAT** 
TTCTTC**TCTCCAT** 
TATTAT**TCTCCAT** 

Я хочу, чтобы сгруппировать и считать мои данные, чтобы иметь выход следующим образом:

TTGGGG**TCTCCAT** - 2 
TTGGGG**TCTCCAT** - 2 
TATTAT**TCTCCAT** - 1 

С 6 символов перед Символ, выделенный полужирным шрифтом, случайный, я не уверен, как закодировать его в python.

+3

Что именно вы пробовали? – inspectorG4dget

ответ

0
from collections import Counter 
with open('path/to/input') as infile: 
    counts = collections.Counter(line.strip() for line in infile) 
for seq, count in counts.items(): 
    print(seq, '-', count) 

В приведенном выше решении используется collections.Counter.
Если с другой стороны, вы бы лучше не использовать помощников, встроенные в стандартную библиотеку, то вы можете сделать следующее с идентичными результатами:

counts = {} 
with open('path/to/input') as infile: 
    for line in infile: 
     seq = line.strip() 
     if seq not in counts: 
      counts[seq] = 0 
     counts[seq] += 1 
    for seq, count in counts.items(): 
     print(seq, '-', count) 
+1

Это немного голые кости. Возможно, какое-то объяснение было приятным. – RiggsFolly

+1

@RiggsFolly: Я бы с удовольствием добавил объяснение, если бы ФП хотел сделать то же самое для вопроса. Ясно, что OP все равно, поэтому я не приложил много усилий в свой ответ, за его пределами. – inspectorG4dget

+0

Хорошая точка, хорошо сделанная. Но с вашей оценкой репутации вы действительно должны знать лучше. – RiggsFolly

0

Первый метод:

Пример:

>>[1, 2, 3, 4, 1, 4, 1].count(1) 
3 

Таким образом, в вашем случае:

>>['TTGGGG**TCTCCAT**','TTCTTC**TCTCCAT**','TTGGGG**TCTCCAT**','TTCTTC**TCTCCAT**','TATTAT**TCTCCAT**'].count('TTGGGG**TCTCCAT**') 

Второй метод:

>>> from collections import Counter 
>>> z = ['TTGGGG**TCTCCAT**',TTCTTC**TCTCCAT**',TTGGGG**TCTCCAT**','TTCTTC**TCTCCAT**','TATTAT**TCTCCAT**'] 
>>> Counter(z) 
Counter({'TTGGGG**TCTCCAT**':2, 'TTGGGG**TCTCCAT**': 2, 'TATTAT**TCTCCAT**': 1}) 
+0

Как использовать первый метод для получения желаемого результата? – martineau

+0

print ['TTGGGG ** TCTCCAT **', 'TTCTTC ** TCTCCAT **', 'TTGGGG ** TCTCCAT **', 'TTCTTC ** TCTCCAT **', 'TATTAT ** TCTCCAT **']. Count ('TTGGGG ** TCTCCAT **') ==> распечатывает 2 – lakesh

+0

Нет, я имел в виду, если вы читаете значения из файла, как вы печатаете подсчет каждого значения, избегая повторений, если это значение, вы видели раньше. Не обращаясь к этому, ваш первый пример кажется довольно бесполезным ИМХО. – martineau

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