0

これは奇妙です。テキスト頻度計算を実装しようとしており、ipython ノートブックで python 2.7 を使用して次のコードを実行しています。関数の 3 つのバージョン。

最初のバージョンでは、文字列のリスト内の単語のインスタンスを数えて、辞書に貼り付けます。

testList = ['I', 'am', 'a', 'list', 'of', 'strings']

def tf1(listOfStrs):
    thedict = dict((x,listOfStrs.count(x)) for x in set(listOfStrs))
    print thedict

# produces expected output: 
> {'a': 1, 'I': 1, 'am': 1, 'list': 1, 'of': 1, 'strings': 1}

わかりました、それはうまくいきます。各出現を単語の総数で割って、実際に頻度を取得する時間。0.16...などを生成する必要があります。

def tf2(listOfStrs):
    print len(listOfStrs)
    thedict = dict((x,listOfStrs.count(x)/len(listOfStrs)) for x in set(listOfStrs))
    print thedict

tf2(testList)
> 6
> {'a': 0, 'I': 0, 'am': 0, 'list': 0, 'of': 0, 'strings': 0}

「ああ!」おもう。これは、世界で最も修正しやすいバグです。整数除算をしています。私は整数除算をしたくありません。項の 1 つを float にキャストするだけです。バム。

def tf2(listOfStrs):
    print len(listOfStrs)
    thedict = dict((x,listOfStrs.count(x)/float(len(listOfStrs)) for x in set(listOfStrs))
    print thedict

>   File "<ipython-input-13-db67e35f2596>", line 3
>     thedict = dict((x,listOfStrs.count(x)/float(len(listOfStrs)) for x in set(listOfStrs))
>                                                                    ^
> SyntaxError: invalid syntax

???? for ステートメントに構文エラーがないことはわかっています。前の 2 つのバージョンでは問題なく機能していたからです。うーん。したがって、明らかにフロートへのキャストは辞書の理解を壊しました。しかし、それは正気ではないようです。int を float にキャストするだけです。それは世界で最も簡単な操作です...どのように辞書の理解を破ったのですか?

私はこれに完全に困惑しています...誰か素晴らしいアイデアを持っていますか?

4

1 に答える 1

0

このメタ ディスカッションによると、Tim Peters に代わってこの質問に回答し、コミュニティ ウィキとしてマークします。

括弧のバランスが取れていません。を追加したときにfloat(、 を追加するのを忘れました)

于 2015-06-21T18:33:07.907 に答える