2016-10-13 11 views
0

私は小さな例のように(非常に大きな)リストを持っています。私は、リスト内の各シーケンスのDの数を数え、そのシーケンスの長さで割ります。 (各シーケンスでDが発生する)。リストの各シーケンスでの要素の出現を数えます。

小さな例:

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

は、あなたたちはそれを行う方法を知っていますか?あなたは、単に、リストの内包を使用するシーケンスの長さによって、各配列中Dの数と除算を得ることができます

+2

これはあなた自身でやってみましたか?これまでに行ったことを示して、現在の実装でどのような困難があるのか​​説明できますか? – idjaw

答えて

1

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を使用する場合、分割する前に両方のオペランドを浮動小数点に変換する必要さえありません。ちょうど 'output = [item.count(" D ")/ len(item)in item in l]'としてください。 – Guillaume

関連する問題