8
votes

Comment diviser cette chaîne avec Python?

J'ai des chaînes qui ressemblent à cet exemple: "AAABBBCDEEEEBBBAA"

n'importe quel caractère est possible dans la chaîne.

Je veux le diviser dans une liste comme: ['AAA', 'BBB', 'C', 'D', 'EEEE', 'BBB', 'AA']

Donc, chaque tronçon continu des mêmes caractères va à l'élément séparé de la liste de fractions.

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?


0 commentaires

4 Réponses :


15
votes

Nous pourrions utiliser REGEX:

>>> import itertools
>>> [''.join(g) for k, g in itertools.groupby('AAABBBCDEEEEBBBAA')]
['AAA', 'BBB', 'C', 'D', 'EEEE', 'BBB', 'AA']


1 commentaires

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 ;-)



3
votes
import itertools
s = "AAABBBCDEEEEBBBAA"
["".join(chars) for _, chars in itertools.groupby(s)]

0 commentaires

9
votes
>>> 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']

0 commentaires

0
votes

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


0 commentaires