2016-11-21 7 views
0
listg = [1,2,3,4,4,5,2] 


modeval = [0] 
modetimes = [0] 

for i in range(len(listg)): 
    count = listg.count(listg(i)) 
    if count > modetimes[0]: 
     modeval = [listg(i)] 
     count = [modeval] 

    elif count == modetimes[0]: 
     if listg in modeval: 
      modeval.remove[listg(i)] 
    modeval.append[listg(i)] 

mode = modeval 

print (mode) 

ではありません、私はラムダを使用せずに、リストのモードまたはモード機能を見つけようとしているが、私はのpython 3.5はTypeError:「リスト」オブジェクトが呼び出し可能

count = listg.count(listg(i)) 
に丸括弧を使用するとき

modeval = [list(i)] 

TypeError: 'list'オブジェクトが呼び出されることがあります。私は丸いものに角括弧を回してみましたが、私が印刷する数字をするとリストの最後になります。

+0

私は答えを投稿した後にあなたに質問を再読しました。あなたは前に角括弧を使って試したようですが、うまくいきませんでしたか?あなたの例では、 'listg.count(listg(i))'が最初のループを返すと期待していますか? – elethan

答えて

2

括弧で囲む必要があります。listg(i)listg[i]に変更してください。トレースバックが示唆するように、カッコは関数/メソッド呼び出し用です。

また、あなたが達成しようとしていることについて少し混乱していますが、このような場合には一般的にはPythonのアンチパターンと見なされますと考えています(for i in range(len(listg)):)。代わりに、インデックスを使用して、あなたは直接リストの値をループで"beautiful, idiomatic Python"を作成することができます。

for i in listg: 
    count = listg.count(i) 
    if count > modetimes[0]: 
     modeval = [i] 
     count = [modeval] 

... 

ここiではなく、要素を取得するために使用されるインデックスのlistgから実際の要素になります。

また、角括弧で1つのオブジェクトに割り当てると、modeval = [0]など、1つのアイテムのリストが表示されます。それがあなたの望みどおりであれば、それはあなたの意図ではない場合、混乱した結果につながる可能性があります。

関連する問題