10
votes

Python .sort () ne fonctionne pas comme prévu

S'attaquer à quelques problèmes de puzzle dans un samedi soir tranquille (Wooohoo ... pas) et je me débats avec Sort (). Les résultats ne sont pas tout à fait ce que j'attends. Le programme itère à travers chaque combinaison de 100 à 999 et vérifie si le produit est un Palindome. Si c'est le cas, appuyez sur la liste. J'ai besoin de la liste triée: d voici mon programme: xxx

quels filets: xxx

clairement index 0 est plus grand puis 1. Toute idée ce qui se passe? J'ai le sentiment que cela a quelque chose à voir avec des zéros traînants / dirigeants, mais j'ai eu un look rapide et je ne peux pas voir le problème.

points bonus si vous savez où vient le puzzle: P < / p>


1 commentaires

C'est du projet Euler, je pense.


8 Réponses :


24
votes

Vous triez des cordes, pas des chiffres. '101101' <'10201' parce que '1' <2 '. Changer list.append (inversé) à list.append (int (inversé)) et utilisera une fonction de tri différente).


1 commentaires

Oh mec ... Juste quand je pensais que j'étais diplômé de Noob, à Rookie;) Merci!



0
votes

Vous avez vos numéros stockés comme des chaînes, donc Python les trite en conséquence. Ainsi: '101x' vient avant '102x' (de la même manière que "ABCD" viendra avant 'AZ').


0 commentaires

0
votes

Non, il trie correctement, juste qu'il trie lexographiquement et que vous voulez numérique Tri ... alors retirez le "STR ()"


2 commentaires

Sur un sujet séparé, votre programme pourrait être optimisé. CONSEIL: Générez Les chiffres ..


Oui, je sais et je pourrais les compiler plus tard, mais c'est assez rapide pour la tâche à accomplir.



1
votes

Vous triez des cordes, pas des chiffres. Cordures comparent de gauche à droite.


0 commentaires

2
votes

Votre liste contient des chaînes afin de les trier alphabétiquement - essayez de convertir la liste en entiers, puis faites le tri.


0 commentaires

0
votes

L'opérateur de comparateur traite votre entrée en tant que chaînes au lieu d'entiers. Dans la Comparsion String 2, la 3ème lettre étant lexicalement supérieure à 1. inversé = str (mult) [:: - 1]


0 commentaires

13
votes

Trier fait son travail. Si vous aviez l'intention de stocker des entiers dans la liste, prenez les conseils de Lukáå. Vous pouvez également dire comment trier comment trier, par exemple en faisant des INTS:

list.sort(key=int)


0 commentaires

1
votes

Pas besoin de convertir en int. MOUT est déjà un INT et comme vous l'avez vérifié, il s'agit d'un palindrome, il ressemblera à la même chose que inversé, alors juste:

list.append(mult)


0 commentaires