3

以下はカウント文字のコーディングであり、次のように出力する必要があります

[('e', 1), ('g', 2), ('l', 1), ('o', 2)]

そして私の出力は

[('e', 1), ('g', 2), ('g', 2), ('l', 1), ('o', 2), ('o', 2)]

これは私のコードです

def countLetters(word):
    word=list(word)
    word.sort()
    trans=[]
    for j in word:
        row=[]
        a=word.count(j)
        row.append(j)
        row.append(a)
        trans.append(tuple(row))
    return trans

誰かが私のコードで期待される出力を取得する方法を説明できますか?ありがとうございました

4

6 に答える 6

13

なぜ単に使用しないのCounterですか?

例:

from collections import Counter

c = Counter("Foobar")
print sorted(c.items())

出力:

[('F'、1)、('a'、1)、('b'、1)、('o'、2)、('r'、1)]


もう1つの方法はdict、またはそれ以上を使用することですdefaultdict(Python 2.6以降を実行している場合Counter、Python 2.7で追加されたため)

例:

from collections import defaultdict

def countLetters(word):
    d = defaultdict(lambda: 0)
    for j in word:
        d[j] += 1
    return sorted(d.items())

print countLetters("Foobar")

出力:

[('F'、1)、('a'、1)、('b'、1)、('o'、2)、('r'、1)]


または、単純なリスト内包表記を使用します

word = "Foobar"
print sorted((letter, word.count(letter)) for letter in set(word))
于 2012-08-14T06:26:41.117 に答える
5
>>> from collections import Counter
>>> Counter('google')
Counter({'o': 2, 'g': 2, 'e': 1, 'l': 1})
>>> from operator import itemgetter
>>> sorted(Counter('google').items(), key=itemgetter(0))
[('e', 1), ('g', 2), ('l', 1), ('o', 2)]
>>> 

実際には、次の必要はありませんkey

>>> sorted(Counter('google').items())
[('e', 1), ('g', 2), ('l', 1), ('o', 2)]

タプルは最初に最初のアイテムでソートされ、次に2番目のアイテムでソートされます。

于 2012-08-14T06:25:49.490 に答える
2
def countLetters(word):
    k=[]
    Listing=[]
    Cororo=[]
    for warm in word:
        if warm not in k:
            k.append(warm) 
    for cold in range(len(k)):
        word.count(k[cold])
        Listing.append(word.count(k[cold]))
        Cororo.append((k[cold],Listing[cold]))
    return sorted(Cororo)

私の上の男のようにカウンターモジュールを使用して、生活を楽にすることができるので、これはこれを行うための少し古い方法です。

于 2016-01-02T17:36:42.760 に答える
1

次のようにコードを変更できます(Python 2.5以降)。

def countLetters(word):
    word=list(word)
    word.sort()
    trans=[]
    for j in word:
        row=[]
        a=word.count(j)
        row.append(j)
        row.append(a)
        trans.append(tuple(row))
    ans = list(set(trans))
    ans.sort()
    return ans
于 2012-08-14T06:26:15.200 に答える
1

j問題は、ループ内の文字の重複の出現を考慮していないことです

簡単な修正は、イテレーションをとして変更することだと思いますfor j in set(word)

これにより、各文字が1回繰り返されます。

于 2012-08-14T06:27:58.367 に答える
-2

trans = list(set(trans))

listaをに変換するとset重複が削除されます(これがあなたのやりたいことだと思います)。

于 2012-08-14T06:26:22.217 に答える