2009-10-03 23 views
7

静かな土曜日の夜(土曜日の夜)にいくつかのパズルの問題に取り組み、sort()で苦労しています。結果は、私が期待するものではありません。このプログラムは、100〜999のすべての組み合わせを繰り返し、製品がパインドームかどうかをチェックします。そうであれば、リストに追加します。ここではDを私のプログラムです::私は、ソートされたリストが必要Python .sort()が期待通りに動作しない

['101101', '10201', '102201', '102201', '105501', '105501', '106601', '108801', 
'108801', '110011'] 

が明らかにインデックス0は何が起こっているすべてのアイデア1.その後、大きい:ネット

list = [] #list of numbers 

for x in xrange(100,1000): #loops for first value of combination 
    for y in xrange(x,1000): #and 2nd value 
    mult = x*y 
    reversed = str(mult)[::-1] #reverses the number 
    if (reversed == str(mult)): 
     list.append(reversed) 

list.sort() 
print list[:10] 

?私は後ろに/先行ゼロと関係があると感じているが、私はすばやく見て、私は問題を見ることができません。

ボーナスポイントパズルはどこから来るあなたが知っている場合:P

+1

回文メイト – whatnick

+2

をそれはプロジェクトオイラーからだと思います。 –

+0

@ J S:ビンゴ:D –

答えて

20

あなたは、文字列ではなく、数字を並べ替えています。 です。'101101' < '10201'です。 list.append(reversed)list.append(int(reversed))に変更すると、動作します(または別のソート機能を使用します)。

+6

オハイオ州の男...ちょうど私がノーベルから卒業したと思った時、ルーキーに);ありがとう! –

0

あなたの数字は文字列として格納されているので、pythonはそれに応じてソートします。したがって: '101x'は '102x'の前に来ます(abcdは'z 'の前に来るのと同じ方法です)。

0

いや、そうあなたは、文字列ではなく数値をソートしている「STR()」

+1

別のトピックでは、プログラムを最適化できます。ヒント:**数字を生成する。 – aviraldg

+0

ええ、私は後でそれらをコンパイルするかもしれないが、手近な作業のために十分速い。 –

1

を削除...それはlexographicallyをソートされていて、ソート数値をしたいだけのことを、適切にソートされます。文字列は左から右に比較されます。

2

リストには文字列が含まれているため、アルファベット順にソートされています。リストを整数に変換してから並べ替えてみてください。

0

比較演算子は入力を整数ではなく文字列として扱います。文字列comparsion 2では3番目の文字が字句的に1より大きい。 reversed = str(mult)[::-1]

11

ソートはやり遂げています。リストに整数を格納する場合は、Lukášのアドバイスを受けてください。また作りint型で、たとえば、ソート方法ソート伝えることができます:

list.sort(key=int) 

重要なパラメータは、すべての比較では、リストオブジェクトの場所を取るためにアイテムを計算する関数をとります。整数は、期待どおりに数値的に比較されます。

(あなたは組み込みのリストを上書きするようちなみに、listは、本当に悪い変数名である()を入力!)

1

int型に変換する必要はありません。 MULTはすでにint型であり、あなたがチェックしたとして、それは逆に、これだけと同じになります回文です:

list.append(mult) 
関連する問題