7
votes

Comment remplacer la chaîne vide avec zéro dans une chaîne séparée par des virgules?

"8,5 , 1,4,7 ,9,3,6 ,8,6,3,9 ,4,4 , 3,2 ,4,1,1 ,4, 6,9 , 5 ,3 ,6,5 , 4, 1,7,6 ,1 ,9, 3,9, "

Je fais un défi de programmation où j'ai besoin d'analyser cette séquence dans mon script Sudoku. Besoin d'obtenir la séquence ci-dessus dans 8,5,0,1,4,0,0,0,0,0,7,0,1,0,3,6,0,0,8 ........ . J'ai essayé Re, mais sans succès, l'aide est appréciée, merci.


1 commentaires

Question amusante et une grande opportunité d'écrire un python vraiment idiomatique.


6 Réponses :


5
votes

Les expressions régulières sont souvent inutiles dans Python. CORRECTED String S CODE>, ESSAYEZ:

[(x and int(x)) or 0 for x in s.split(',')]


0 commentaires

0
votes
>>> 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]
>>>

0 commentaires

11
votes

Vous pouvez utiliser

(int(x) if x else 0)


1 commentaires

Merci pour l'aide, c'est vraiment clair la façon dont vous et Dietrich EPP l'avez expliqué.



4
votes
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

2 commentaires

Wow c'est fou, votre Genius mec.


Je suis d'accord avec la partie "Insane": j'aime essayer d'écrire ces REGES afin de tester mes compétences, mais pour des programmes réels, je préférerais utiliser l'une des autres solutions postées ici ;-)



0
votes

Le plus simple, je peux penser est xxx

ou xxx


0 commentaires

0
votes

Ma solution utilise mappe code>, lambda code> et divisé code>. Le code final ressemble à ceci: xxx pré>

Si vous souhaitez la sortie sous forme de liste (c.-à-d. [1,2,3,0,4,5,0,6] Code>), utilisez ensuite p>

lambda x: x+1


0 commentaires