12
votes

Renvoyer l'indice le plus bas pour le premier caractère sans blanchiment dans une corde en python

Quel est le moyen le plus court de le faire en python?

string = "   xyz"


1 commentaires

7 Réponses :


6
votes
(...).next()

3 commentaires

bla.strip () et bla.isspace () fonctionne ok avec Unicode; String.WhitSpace est gelée au cours du siècle dernier.


@John: dit qui? Je vois string.whitespace comme deuxième approche la plus efficace après l'acceptation de l'une.


Re-lisez mon commentaire. Je parle de travailler avec Unicode; Aucune mention d'efficacité.



43
votes
>>> s = "   xyz"
>>> len(s) - len(s.lstrip())
3

2 commentaires

Si S est long et que le préfixe des espaces est court, d'autres solutions (celles qui ne prennent pas une température presque-copie de S, de la longueur de la longueur, puis de lancer l'objet TEMP) peuvent être préférables.


@Johnmachin String est immuable dans Python, donc je doute vivement que l'interprète fait une copie pour bande () . La chaîne d'origine peut simplement être réutilisée avec une position de départ différente.



-1
votes
>>> string = "   xyz"
>>> next(idx for idx, chr in enumerate(string) if not chr.isspace())
3

1 commentaires

-1 comme il échoue pour toute chaîne entièrement blanchissante ... "STOVITÉTRATION:" Erreur est émise dans ce cas



-1
votes
>>> string = "   xyz"
>>> map(str.isspace,string).index(False)
3

1 commentaires

-1 Comme il échoue pour toute chaîne entièrement blanchissante ... :( "ValueError: Faux n'est pas dans la liste"



2
votes

On dirait que les "regexes peuvent faire quelque chose" de la brigade ont pris le jour de congé, donc je vais remplir: xxx

fwiw: le temps pris est O (the_answer), pas O ( len (input_string))


0 commentaires

1
votes
import re
def prefix_length(s):
   m = re.match('(\s+)', s)
   if m:
      return len(m.group(0))
   return 0

5 commentaires

"" "Assurez-vous que votre code" ne fait rien "gracieusement." "- Attribué à Jon Bentley IIRC.


Pardonne-moi mon ignorance, mais qui est lui?


L'ignorance est pardonnable; La réticence d'utiliser un moteur de recherche est une autre question ;-) en.wikipedia.org/wiki/jon_bentley


@Johnmachin - d'oh ... bon point sur + au lieu de * . Mon casquette de pensée n'était pas complètement ce matin.


Aussi, vous avez des parenthèses redondantes.



2
votes

Beaucoup de solutions précédentes sont itérantes à plusieurs points de leurs solutions proposées. Et certains font des copies des données (la chaîne). Re.Match (), Strip (), Enumérer (), Isspace () Duplagage derrière le travail de la scène. Les

i = 0
while i < len(s) and s[i] == ' ': i += 1

print i
3


0 commentaires