Je souhaite réduire ou développer des sous-séquences d'une listeManière élégante de réduire ou de développer des sous-séquences d'une liste en Python?
Par ex. ['A', 'B', 'D', 'E', 'H'] -> ['AB', 'DE', 'H']
et vice versa
EDIT: l'exemple ci-dessus peut provoquer un malentendu. ce qui suit est meilleur:
par exemple. ['foo', 'bar', 'wtf'] <-> ['baz', 'wtf']
actuellement j'ai écrit un code laid comme:
while True:
for i, x in enumerate(s):
if x == 'foo' and s[i+1] == 'bar':
s[i:i+2] = 'baz'
break
else:
break
Pour les personnes qui demandent « pourquoi cette chose »:
En fait, je travaille sur un compilateur d'optimisation, ce qui est la partie judas . L'écriture de motifs est un peu ennuyante.
P.S. J'ai trouvé le code suivant fonctionne, mais un peu ridicule, pourquoi énumérer connaître notre modification?
s = ['foo', 'bar', 'wtf', 'foo', 'bar', 'wtf', 'foo', 'bar', 'wtf']
def collapse():
for i, x in enumerate(s):
if s[i] == 'foo' and s[i+1] == 'bar':
s[i:i+2] = ['baz']
def expand():
for i, x in enumerate(s):
if s[i] == 'baz':
s[i:i+1] = ['foo', 'bar']
collapse()
print s
expand()
print s
Comment "foo" et "bar" deviennent "baz"? – SilentGhost
juste trouver foo suivi par une barre, et les tourner à baz – inv