0

特定の単語に文字が何回出現するかをカウントするサンプル プログラムを作成しています。「良い」と言って、g が 1 回発生した、o が 2 回発生したなど。今度は、辞書の値としてリストを持ち、既存の文字が見つかるたびに最初の要素 (インデックス 0) を 1 ずつ増やして、これをさらに進めたいと思います。単語内の文字のインデックスによって dict 値の同じリストを追加します。 12]...など}

したがって、各 dict 値の最初のインデックスは、文字の出現によって増加します (つまり、文字が見つかった場合は +1) が、リスト内の他の値が追加されます (単語内で文字が見つかった場所を保持します)。私はこれを数えるためだけに持っていますが、索引付けのためには持っていません

def count(word):
    v=0;b={}
    b.clear()
    while word[v] in word:
        if word[v] in b.keys():
            b[word[v]]+=1;v+=1
        else:
            b[word[v]]=1;v+=1
        if v==(len(word)):
            break
    print("\n",b)


word=input("Enter word: ")
count(word)
4

5 に答える 5

2

collections.defaultdict代わりにaを使用します。

import collections

def count(word):
    c = collections.defaultdict(list)
    for index, letter in enumerate(word):
        c[letter] += [index]
    return c

print count('programming is nature')

出力:

defaultdict(<type 'list'>, {'a': [5, 16], ' ': [11, 14], 'e': [20], 'g': [3, 10], 'i': [8, 12], 'm': [6, 7], 'o': [2], 'n': [9, 15], 'p': [0], 's': [13], 'r': [1, 4, 19], 'u': [18], 't': [17]})
于 2012-07-01T05:36:51.117 に答える
0

これが私の解決策でした:

def count(word):
    b={}
    for i,letter in enumerate(word):
        if letter not in b:
            b[letter]=[0]
        b[letter][0]+=1
        b[letter].append(i)
return b

print(count("プログラミングは自然です"))

word="プログラミングは自然です" print(count(word))

思い通りに機能します。:)

出力:

{'a': [2, 5, 16], ' ': [2, 11, 14], 'e': [1, 20], 'g': [2, 3, 10], 'i': [2, 8, 12], 'm': [2, 6, 7], 'o': [1, 2], 'n': [2, 9, 15], 'P': [1, 0], 's': [1, 13], 'r': [3, 1, 4, 19], 'u': [1, 18], 't': [1, 17]}
于 2012-07-01T05:39:47.513 に答える
0

では、最初にメモをいくつか。

inputの代わりにraw_inputを使用する必要があります。入力内容を Python コードとして評価し、stdin から入力を取得します (Python 3 を使用している場合は無視してください)。dict 値が取り得る特定のデフォルト値がある場合、collections.defaultdictは非常に便利です。inputraw_input

from collections import defaultdict

def count(word):
    counts = defaultdict(int)
    appearances = defaultdict(list)
    for pos, val in enumerate(word)
        counts[val] += 1
        appearances[c].append(pos)

    print 'counts:', counts
    print 'appearances:', appearances

word = input("Enter word: ")
count(word)

defaultdictcallable を引数として取るので、次のようにします:

x = defaultdict(int)
x['b'] += 1

'b'x のキーではないため、int()(ゼロである) の値に初期化します。

于 2012-07-01T05:40:15.453 に答える
0

Python 2.7+ を使用している場合は、次を使用しますCounter

>>> from collections import Counter
>>> Counter('abchfdhbah')
Counter({'h': 3, 'a': 2, 'b': 2, 'c': 1, 'd': 1, 'f': 1})
>>> the_count = Counter('abchfdhbah')
>>> the_count['h']
3
于 2012-07-01T05:41:02.003 に答える
0

defaultdict少し違った使い方:

from collections import defaultdict
example = 'Programming is nature'
D=defaultdict(lambda: [0])
for i,c in enumerate(example):
    D[c][0] += 1
    D[c].append(i)
for k,v in D.items():
    print(k,v)

あなたの例に一致する出力:

a [2, 5, 16]
  [2, 11, 14]
e [1, 20]
g [2, 3, 10]
i [2, 8, 12]
m [2, 6, 7]
o [1, 2]
n [2, 9, 15]
P [1, 0]
s [1, 13]
r [3, 1, 4, 19]
u [1, 18]
t [1, 17]
于 2012-07-01T06:05:28.787 に答える