"8,5,, 1,4,7", 7,, 1,9,3,6 ", 8,6,3,9, 2,5,4 ,,,,, 3 , 2 ,,, 7,4,1,1,, 4, 6,9, 5, 5, 1, 6,3, 6,5, 7,4 "Je fais un défi de programmation où je dois analyser cette séquence dans mon script de sudoku . Besoin d'obtenir la séquence ci-dessus en 8,5,0,1,4,7,0,0,0,7,0,1,9,3,6,0,0,8 ....... .. J'ai essayé re mais sans succès, l'aide est appréciée, merci.Comment remplacer une chaîne vide par zéro dans une chaîne séparée par des virgules?
Répondre
vous pouvez utiliser
[(int(x) if x else 0) for x in data.split(',')]
data.split(',')
divise la chaîne dans une liste. Il se divise sur la virgule:
['8', '5', '', '1', '4', '7', '', '', '', ...]
L'expression
(int(x) if x else 0)
retours int(x)
si x
est vrai, 0 si x
est faux. Notez que la chaîne vide est False.
Merci pour l'aide, c'est vraiment clair comme vous et Dietrich Epp l'ont expliqué. – Kev
Les expressions régulières sont souvent inutiles dans Python. Compte tenu de la chaîne s
, essayez:
','.join(x or '0' for x in s.split(','))
Je suppose que vous voulez remplir les blancs avec 0. Si vous voulez une liste d'entiers au lieu d'une chaîne, essayez ceci:
[(x and int(x)) or 0 for x in s.split(',')]
>>> s="8,5,,1,4,7,,,,7,,1,9,3,6,,,8,6,3,9,,2,5,4,,,,,3,2,,,7,4,1,1,,4,,6,9,,5,,,,5,,,1,,6,3,,,6,5,,,,7,4,,1,7,6,,,,8,,5,,,7,1,,3,9,"
>>> s=s.split(",")
>>> for n,i in enumerate(s):
... if i=="" : s[n]=0
...
>>> s
['8', '5', 0, '1', '4', '7', 0, 0, 0, '7', 0, '1', '9', '3', '6', 0, 0, '8', '6', '3', '9', 0, '2', '5', '4', 0, 0, 0, 0, '3', '2', 0, 0, '7', '4', '1', '1', 0, '4', 0, '6', '9', 0, '5', 0, 0, 0, '5', 0, 0, '1', 0, '6', '3', 0, 0, '6', '5', 0, 0, 0, '7', '4', 0, '1', '7', '6', 0, 0, 0, '8', 0, '5', 0, 0, '7', '1', 0, '3', '9', 0]
>>>
s = "8,5,,1,4,7,,,,7,,1,9,3,6,,,8,6,3,9,,2,5,4,,,,,3,2,,,7,4,1,1,,4,,6,9,,5,,,,5,,,1,,6,3,,,6,5,,,,7,4,,1,7,6,,,,8,,5,,,7,1,,3,9,"
s = re.sub('((?<=,)|^)(?=,|$)', '0', s)
print s
Prints:
8,5,0,1,4,7,0,0,0,7,0,1,9,3,6,0,0,8,6,3,9,0,2,5,4,0,0,0,0,3,2,0,0,7,4,1,1,0,4,0,6,9,0,5,0,0,0,5,0,0,1,0,6,3,0,0,6,5,0,0,0,7,4,0,1,7,6,0,0,0,8,0,5,0,0,7,1,0,3,9,0
Wow c'est fou, votre mec génie. – Kev
Je suis d'accord avec la partie "folle": j'aime essayer d'écrire ces reges afin de tester mes compétences, mais pour de vrais programmes, je préfère utiliser l'une des autres solutions postées ici ;-) –
Je pense Simplest représente:
[int(x or 0) for x in s.split(',')]
ou
[int('0'+x) for x in s.split(',')]
Ma solution utilise map
, lambda
et split
. Le code final ressemble à ceci:
sudoku_string = "1,2,3,,4,5,,6"
output_string = map(lambda x: '0' if x=='' else x, sudoku_string.split(","))
Si vous voulez que la sortie sous forme de liste (à savoir [1,2,3,0,4,5,0,6]
), puis utilisez
output_list = map(lambda x: 0 if x=='' else int(x), sudoku_string.split(",")
Les commandes map
et lambda
sont très utiles. map
prend dans une fonction et une liste (vraiment une itérable, mais c'est une autre histoire), et applique la fonction à chaque élément de cette liste. Ainsi,
def plus_one(x):
return x+1
map(plus_one, [1,2,3,4])
renvoie [2,3,4,5]
.lambda
est un moyen de définir rapidement les fonctions, de sorte que nous pouvons écrire plus_one
comme
lambda x: x+1
Enfin, split
prend une chaîne et crée une liste par « division » de la chaîne par l'argument que vous passez. Donc "1 2 3 4".split(" ")
donne [1,2,3,4]
.
- 1. Remplacer une chaîne variable par une chaîne vide
- 2. Remplacer non numérique par une chaîne vide
- 3. Supprime les virgules dans une chaîne et insère chaque valeur séparée par des virgules dans une chaîne
- 4. Comment construire une chaîne séparée par des virgules dans Bourne shell?
- 5. Remplacer une chaîne d'une soumission par une chaîne vide si une chaîne est présente
- 6. Comment remplacer les occurrences de "-" par une chaîne vide?
- 7. Utilisez une chaîne séparée par des virgules dans `IN()` dans MySQL
- 8. Comment feriez-vous une chaîne séparée par des virgules d'une liste?
- 9. Idiomatique jQuery pour obtenir toutes les options dans une liste en chaîne séparée par des virgules?
- 10. Diviser une chaîne séparée par des virgules en plusieurs colonnes en db-php
- 11. Remplacer une chaîne par une autre
- 12. Chaîne de retour de description chaîne d'ID donnée (séparée par des virgules)
- 13. Remplacer la chaîne par une valeur incrémentée
- 14. Comment analyser les champs dans une chaîne séparée par des virgules en utilisant sscanf tout en supportant les champs vides?
- 15. Usinq Linq permet de sélectionner des éléments dans une chaîne séparée par une virgule.
- 16. Rails: affichage @cars comme une liste séparée par des virgules
- 17. Supprimer principale d'une chaîne par des virgules
- 18. Remplacer une chaîne par un contrôle utilisateur
- 19. PHP: remplacer une chaîne d'une chaîne particulière par une chaîne particulière
- 20. Listview ... comment remplacer conditionnellement une valeur par une chaîne
- 21. convertir la chaîne séparée par des virgules en table SQL dans SP
- 22. Comment puis-je prendre le premier mot dans une chaîne séparée par des virgules en utilisant l'expression régulière
- 23. Comment puis-je remplacer "/" par "\ /" dans une chaîne?
- 24. Remplacer la double citation par la chaîne vide C#
- 25. Parsing une liste séparée des points-virgules
- 26. manière efficace en Python pour supprimer un élément d'une chaîne séparée par des virgules
- 27. Comment trouver une chaîne dans une chaîne et la remplacer?
- 28. chaîne remplacer par jquery assitance
- 29. Informix - Agrégation de la liste de valeurs dans une chaîne délimitée par des virgules
- 30. Meilleure méthode pour remplacer une chaîne par une chaîne contenant des barres obliques inverses (\)
Question amusante et excellente occasion d'écrire vraiment Python idiomatique. –