2016-10-13 3 views
0

У меня есть (очень большой) список, например, маленький пример. Я хочу подсчитать количество D в каждой последовательности в списке и делить на длину этой последовательности. (появление D в каждой последовательности).подсчет вхождения элементов в каждую последовательность списка в python

небольшой пример:

l = ['MLSLLLLDLLGLG', 'MEPPQETNRPFSTLDD', 'MVDLSVSPDVPKPAVI', 'XNLMNAIMGSDDDG', 'MDRAPTEQNDDVKLSAE'] 

вы, ребята, знаете, как это сделать?

+2

Вы пытались сделать это сами? Можете ли вы показать, что вы делали до сих пор, и объяснить, какие трудности вы испытываете в своей текущей реализации? – idjaw

ответ

1

Вы можете просто использовать список понимание, получить счетчик D в каждой последовательности и разделить на длину последовательности:

l = ['MLSLLLLDLLGLG', 'MEPPQETNRPFSTLDD', 'MVDLSVSPDVPKPAVI', 'XNLMNAIMGSDDDG', 'MDRAPTEQNDDVKLSAE'] 

result = [x.count('D')/len(x) for x in l] 
print(result) 
# [0.07692307692307693, 0.125, 0.125, 0.21428571428571427, 0.17647058823529413] 

Для обработки нулевой последовательности длины и избежать ZeroDivisionError, вы можете использовать троичный оператор:

result = [(x.count('D')/len(x) if x else 0) for x in l] 
0

Вы ищете что-то вроде:

def fn(x): 
    return x.count('D')/len(x) 
results = ap(fn, l) 
1

Вы можете использовать список для того, чтобы получить ожидаемый результат.

Я перечислил каждый элемент в списке, для каждого из элементов в списке я подсчитал количество вхождений указанной подстроки (в данном случае «D»).

Последнее, что я поделил количество вхождений с длиной элемента.

l = ['MLSLLLLDLLGLG', 'MEPPQETNRPFSTLDD', 'MVDLSVSPDVPKPAVI', 'XNLMNAIMGSDDDG', 'MDRAPTEQNDDVKLSAE'] 
output = [float(item.count("D"))/float(len(item)) for item in l] 
+0

Хорошее решение. И если вы используете Python 3, вам даже не нужно преобразовывать оба операнда в float перед делением. Просто 'output = [item.count (" D ")/len (item) для элемента в l]' и сделайте с ним. – Guillaume

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