J'ai des chaînes qui ressemblent à cet exemple: "AAABBBCDEEEEBBBAA" P>
n'importe quel caractère est possible dans la chaîne. p>
Je veux le diviser dans une liste comme: ['AAA', 'BBB', 'C', 'D', 'EEEE', 'BBB', 'AA'] P>
Donc, chaque tronçon continu des mêmes caractères va à l'élément séparé de la liste de fractions. P>
Je sais que je peux itérer sur des caractères de la chaîne, vérifier chaque paire I et I-1 s'ils contiennent le même caractère, etc. Mais y a-t-il une solution plus simple là-bas? P>
4 Réponses :
Nous pourrions utiliser REGEX:
>>> import itertools
>>> [''.join(g) for k, g in itertools.groupby('AAABBBCDEEEEBBBAA')]
['AAA', 'BBB', 'C', 'D', 'EEEE', 'BBB', 'AA']
Wow, merci, la solution de regex est cool, groupeby aussi, comment est-il possible que je passe beaucoup de temps à ce problème avant d'envoyer la question à Stackoverflow et à obtenir la réponse en 5 minutes ;-)
import itertools s = "AAABBBCDEEEEBBBAA" ["".join(chars) for _, chars in itertools.groupby(s)]
>>> a=[];S="";p="" >>> s 'AAABBBCDEEEEBBBAA' >>> for c in s: ... if c != p: a.append(S);S="" ... S=S+c ... p=c ... >>> a.append(S) >>> a ['', 'AAA', 'BBB', 'C', 'D', 'EEEE', 'BBB', 'AA'] >>> filter(None,a) ['AAA', 'BBB', 'C', 'D', 'EEEE', 'BBB', 'AA']
juste une autre façon de résoudre votre problème:
#!/usr/bin/python
string = 'AAABBBCDEEEEBBBAA'
memory = str()
List = list()
for index, element in enumerate(string):
if index > 0:
if string[index] == string[index - 1]:
memory += string[index]
else:
List.append(memory)
memory = element
else:
memory += element
print List