2016-04-27 7 views
0

どの行が同じ長さでないかを調べる必要がありますが、最も一般的な単語とは異なるすべての行は、確かに同じ長さ。ここに私のコードです。リスト内に珍しい長さを見つける

import collections 


fle= ['hello', 'hello', 'hello','justi', 'hello','no', 'hello', 'no'] 


count= sum(1 for n in fle) 
print count 

most_common_length = collections.Counter(fle).most_common(1)[0][0] 
print most_common_length 

mcl = len(most_common_length) 

uncommon = [n for n, v in enumerate(fle) if v != most_common_length] 
print uncommon 

答えて

0
この行の

uncommon = [n for n, v in enumerate(fle) if v != most_common_length] 

あなたは効果的に「ハロー」に対するアレイ内の各単語を比較するのではなく、最も一般的な単語の長さの単語の長さを比較しています。

出力は[5,7]になります。これは、インデックス5と7の単語が珍しい長さであることを示しています。

+0

を使用することができ、今は言葉が同じものはありませんが、私はこれを行う際に、いくつかは、まだ、5つの文字の同じ長さを持っていることはありませんがあることを言います最も一般的な長さ –

+0

もし動作すれば、ここでのstackoverflowの標準的な手順は答えを受け入れることです。 – e4c5

0
most_common_length = collections.Counter(fle).most_common(1)[0][0] 

あなたは誤った変数名の犠牲者です。 most_common_lengthはまったくそうではありません。実際には、最も一般的なという単語です。 行にlenへの呼び出しがないことに注意してください。それは言葉の長さを数えていない、それは言葉を数えている。

この行とカウントの長さを固定することが重要です。 mclでやっている結果の長さを計算して、悪い検索を回避しようとしないでください。最も一般的な単語の長さは、必ずしも最も一般的な長さと同じではありません。

uncommon = [n for n, v in enumerate(fle) if v != most_common_length] 

もう一度別の問題が見つかるでしょう。最後の比較は、vを最も一般的な長さと比較します。それはlen(v)でなければなりません。長さと長さを比較したいとします。

0

平均の長さと印刷平均以下のものを取得します:

fle = ['hello', 'hello', 'hello','justi', 'hello','no', 'hello', 'no'] 
avg = sum([len(x) for x in fle])/len((fle)) 
print "The following items appear to have an uncommon length: {}".format(', '.join([x for x in fle if len(x) < avg])) 

出力:

The following items appear to have an uncommon length: no, no 
0

あなたは

uncommon = [n for n, v in enumerate(fle) if v != most_common_length] 
には長さではない値を比較しなければなりません

あなたも私はこれを試してみました、それが働いていたが、今私はそれを少し変更し、フィルタ

uncommon = list(filter(lambda x:len(x) != most_common_length, fle)) 
関連する問題