2016-10-13 6 views
0

작은 예제처럼 (매우 큰) 목록이 있습니다. 목록의 각 시퀀스에서 D의 수를 계산하고 해당 시퀀스의 길이로 나누고 싶습니다. (각 시퀀스에서 D가 발생 함).목록의 각 시퀀스에있는 요소의 출현을 파이썬에서 계산합니다.

작은 예 :

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

좋은 해결책. 그리고 파이썬 3을 사용한다면 두 피연산자를 나누기 전에 부동 소수점으로 변환 할 필요조차 없습니다. 그냥'output = [item.count ("D")/len (item) for [item in for]에있는 항목에 대한 것입니다. – Guillaume

관련 문제