2012-04-18 8 views
0

私はPythonを学び、アルゴリズムをよくしようとしています。これは私の最初の言葉です。例えばPythonでソートする

:「荷物」を取ると「aabeggg」に並べ替える

string = "baggage" 
count = [0] * len(string) 

for x in string: 
    num_value = ord(x) 
    count[num_value] += 1 

私は上記のだと思い始めている...しかし、私はそれについて移動する方法を実際に並べ替えていませんよ。

答えて

4

collections.Counterに結果の文字列のそれぞれを結合していることは、これを解決するための素晴らしい方法ですが、ここで取得する方法ですあなたはあなたが向かっている方向にもう少しお待ちください

string = "baggage" 
count = [0] * 256 # This should be big enough to hold counters for every 8 bit character 

for x in string: 
    num_value = ord(x) 
    count[num_value] += 1 

for i in range(256): # loop through all the possible 8 numbers 
    if count[i]: 
     print chr(i)*count[i] 

# you can join them all back into a string like this 
newstr = ''.join(chr(i)*c for i,c in enumerate(count)) 
+1

私はこの解決策が 'ソートされた '呼び出しを避けるのが好きです。これは、OPが意図していたものに非常に近いと思われます。 –

+0

''' .join(chr(i)* cはiを、cは列挙する(count))'あなたの現在のバージョンは 'chr'を呼び出さず、' enumerate'が好きです。 – agf

+0

はい、正しく動作させるには、chr(i) – VPNTIME

1

ここでコードを見てみましょう。

string = "baggage" 
count = [0] * len(string) 
# count is now [0,0,0,0,0,0,0] 

for x in string: 
    num_value = ord(x) 
    # ord(x) gives you the ascii number value of a character x 
    # So for example ord('b') = 98 
    count[num_value] += 1 
    # error here since count[98] isn't set. 

パブロはあなたにすばやい解決策を与えました。より明示的な辞書を使って書きます。

string = "baggage" 
count = {} 

for c in string: 
    if c in count: 
     count[c] += 1 
    else: 
     count[c] = 1 

print ''.join(count[c]*c for c in sorted(count)) 
+0

しかし、あなたは1の配列を取得しています。それぞれの 'index'値は' range'(または 'enumerate')に1回だけ現れます。 – Pablo

+0

@Pabloええ、私は、目的が何であるか完全にはわからないことを明確にしようとしました。たぶん私は何か明白なものを見逃しているか、あるいはおそらく 'カウント'は誤解を招く名前です。 –

+0

彼は各文字の出現回数を数えてソートされた文字列を作成しようとしています。 – Pablo

0

collections.Counterを使用します。

from collections import Counter 
string = 'baggage' 
c = Counter(string) 
result = ''.join(c[x]*x for x in sorted(c.keys())) 

次のように動作します:

  • Counterはあなたがcount[num_value] += 1
  • sorted(c.keys())で達成しようとしたまさに行うことは、ソートにあなたの文字を与えます注文
  • c[x]*xx
  • ''.join(...)文字のc[x]コピーで構成された文字列は、単一の1
関連する問題