Quelle est la manière la plus rapide de manipuler myInput
chaîne afin d'avoir myOutput
chaîne?manipulation de chaîne Python en utilisant xrange
myInput = "1,3-5,7"
myOutput = "1,3,4,5,7"
Quelle est la manière la plus rapide de manipuler myInput
chaîne afin d'avoir myOutput
chaîne?manipulation de chaîne Python en utilisant xrange
myInput = "1,3-5,7"
myOutput = "1,3,4,5,7"
re.sub(
"(\d+)-(\d+)" ,
lambda x : ",".join(map(str , range(int(x.group(1)) , int(x.group(2)) +1))) ,
"1,3-5,7")
Vous pouvez obtenir « 1,3,4,5,7 "
Je me souviens d'une question sur le SO qui se [1,3,4,5,7] dans "1,3-5,7", mais je ne me souviens pas qui
c'est la problème inverse:
def expand(s):
return ','.join(sum([v if len(v)==1 else map(str, apply(lambda a,b: range(a,b+1), map(int, v))) for v in [p.split('-') for p in s.split(',')]],[]))
print expand("1,3-5,7")
impressions:
1,3,4,5,7
>>> def expand(s):
... for p in s.split(","):
... r = p.split("-")
... if len(r) == 1:
... yield str(r[0])
... else:
... for i in range(int(r[0]), int(r[1]) + 1):
... yield str(i)
...
>>> ",".join(expand("1,3-5,7"))
'1,3,4,5,7'
>>> ",".join(expand("1-5,8,10,13-19"))
'1,2,3,4,5,8,10,13,14,15,16,17,18,19'
Évidemment, cela échouera de diverses manières intéressantes si l'entrée ne se conforme pas aux hypothèses (lettres, séquences inverse, etc.), et il ne fonctionne pas avec les nombres négatifs.
Plus rapide que quoi? S'il vous plaît montrer que vous avez au moins essayé. –
Que signifie "x-y"? Tous les nombres entre x et y? – w00t
c'est une quasi-duplication de http://stackoverflow.com/questions/1481192/pythonic-format-for-indices dont la réponse est pour '" 1,3-5,7 "' dans [1,3,4, 5,7] 'doing' ','. Join (réponse (v)) 'à qui donne la réponse à cette question –