2017-07-20 4 views
1

Alle fortlaufenden Zeichengruppen müssen zusammen gruppiert und in eine Liste eingefügt werden. wenn ich diese Zeichenfolge Zum Beispiel haben:Wie trennt man eine Zeichenkette von sich wiederholenden Zeichen?

1112221121 

Ich möchte diese in eine Liste aufgeteilt:

['111', '222', '11', '2', '1']` 

Ein weiteres Beispiel wäre

0011100000 

Ausgang sein: ['00', '111', '00000']

Das ist, was ich mir ausgedacht habe:

In [146]: t = '0011100000' 
    ...: out = [] 
    ...: prev = None 
    ...: for c in t: 
    ...:  if c != prev: 
    ...:   prev = c 
    ...:   out.append('') 
    ...:  out[-1] += c 
    ...:  

In [147]: out 
Out[147]: ['00', '111', '00000'] 

Gibt es eine einfachere Lösung? Ich denke, ich überlebe dies.

+0

@vaultah Dank Kumpel. Das habe ich gebraucht. –

+0

@vaultah: Gratulation zum Finden der genauen Betrogenen! –

+0

@ Jean-FrançoisFabre danke. :) – vaultah

Antwort

2

itertools.groupby tut genau das:

>>> from itertools import groupby 
>>> [''.join(g) for _, g in groupby('1112221121')] 
['111', '222', '11', '2', '1'] 
+0

Ist das nach deiner Meinung eine einfachere Alternative zum Regex im Duplikat? Ich bin mir nicht sicher, was ich benutzen soll. –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ Wenn und wenn es einen einfachen Nicht-Regex-Ansatz gibt, tendiere ich dazu, diese zu bevorzugen, da sie klarer lesen und das Fachwissen über Regex für Ihre Code-Betreuer variieren kann. –

+0

groupby ist wahrscheinlich schneller als Regex, ja. –

Verwandte Themen