1

(もっと良いタイトルがある場合は、編集してください。適切に説明できませんでした! :) これが私のコードです:

with open('cipher.txt') as f:
    f = f.read().replace(' ', '')

new = []
let = []
for i in f:
    let.append(i)
    if i.count(i) > 1:
        i.count(i) == 1
    else:
        new = sorted([i + ' ' + str(f.count(i)) for i in f])
for o in new:
  print(o)

これはcipher.txt次のとおりです。

xli uymgo fvsar jsb

使用された文字と使用回数を出力することになっていますが、コードは機能しますが、アルファベット順にする必要があります。それらをリストに入れてlist(a)並べ替えてみましたが、うまくいきませんでした。アイデア?前もって感謝します!

4

2 に答える 2

3

カウントを扱うときはいつでも、collections.Counterここで使用できます:

>>> from collections import Counter
>>> print sorted(Counter('xli uymgo fvsar jsb'.replace(' ', '')).most_common())
[('a', 1), ('b', 1), ('f', 1), ('g', 1), ('i', 1), ('j', 1), ('l', 1), ('m', 1), ('o', 1), ('r', 1), ('s', 2), ('u', 1), ('v', 1), ('x', 1), ('y', 1)]

モジュールをインポートできない場合はa、リストに追加してから並べ替えることができます。

new = []
for i in f:
    new.append(i + ' ' + str(f.count(i)) # Note that i is a string, so str() is unnecessary

または、リスト内包表記を使用して:

new = [i + ' ' + str(f.count(i)) for i in f]

最後に、並べ替えるには、それを配置するだけsorted()です。結果はアルファベット順であるため、追加のパラメーターは必要ありません:)。

于 2013-09-02T08:05:28.847 に答える