0

私は次のようなコードを持っています:

s = "hello this is hello this is baby baby baby baby hello"
slist = s.split()
finallist = []
for word in slist:
    if len(word) >= 4:
          final = final + [word]

基本的に、上記のコードは、リストを取得し、4文字を超える単語のリストのみを配置するためのものです。

このリストから、同じ単語が出現する回数を数え、それを新しいリストに保存できるようにしたいと思います。つまり、[3,2,4] 3はこんにちはの時間、2はこの時間、4は赤ちゃんのようになります。

4

3 に答える 3

3
from collections import Counter
import re

reg = re.compile('\S{4,}')

s = "hello this is hello this is baby baby baby baby hello"
c = Counter(ma.group() for ma in reg.finditer(s))
print c

結果

Counter({'baby': 4, 'hello': 3, 'this': 2})

また:

from collections import defaultdict
d = defaultdict(int)

s = "hello this is hello this is baby baby baby baby hello"

for w in s.split():
    if len(w)>=4:
        d[w] += 1

print d
于 2013-03-06T03:16:08.810 に答える
3

collections.Counter明らかにあなたの友達です(特定のソート順で出力が必要な場合を除く)。それを生成内包表記と組み合わせて、長さ 4 の単語をすべて生成すれば、あなたは完璧です。

from collections import Counter

Counter(w for w in s.split() if len(w) >= 4)

要素を最初に出現した順に並べる必要がある場合は、順序付き辞書を使用します。

from collections import OrderedDict

wc = OrderedDict()
for w in s.split():
    if len(w) >= 4:
        wc[w] = wc.get(w, 0) + 1
于 2013-03-06T03:20:09.277 に答える
1

count必要なのは、slistのメソッドを使用することだけです。

dictを使用してより適切に制御できると思います

s = "hello this is hello this is baby baby baby baby hello"
slist = s.split()
finaldict = {}
for word in slist:
    if len(word) >= 4 and not finaldict.get(word):
          finaldict[word] = slist.count(word)

値のリストが必要な場合は、次のようにします。finallist = finaldict.values()

于 2013-03-06T03:21:26.437 に答える