Seite 1 von 1

string manipulation, leerzeichen einfügen

Verfasst: Freitag 22. Oktober 2010, 10:08
von USER67
Tag,

stehe gerade auf dem schlauch mit einer einfachen manipulation.

Code: Alles auswählen


string = "12345678"

..

als output würde ich gerne folgendes haben

12 34 56 78

eigentlich ganz einfach aber ich habe die methode vergessen die es ermöglicht ohne komplexe manipulationen
weiss jemand zufällig welche bzw wie es einfach realisierbar ist?

Mfg

Re: string manipulation, leerzeichen einfügen

Verfasst: Freitag 22. Oktober 2010, 10:18
von numerix

Code: Alles auswählen

>>> s = "12345678"
>>> " ".join(s[i-1:i+1] for i,c in enumerate(s) if i%2)
'12 34 56 78'

Re: string manipulation, leerzeichen einfügen

Verfasst: Freitag 22. Oktober 2010, 10:24
von USER67
hallo

auf die idee wäre ich nie gekommen

danke

Mfg :)

Re: string manipulation, leerzeichen einfügen

Verfasst: Freitag 22. Oktober 2010, 11:09
von sma
Oder...

Code: Alles auswählen

import re; print(re.sub("(..)(?=.)", "\\1 ", s))
Stefan

Re: string manipulation, leerzeichen einfügen

Verfasst: Sonntag 24. Oktober 2010, 22:47
von pillmuncher
Oder...

Code: Alles auswählen

import itertools
si = iter(s)
#Python2:
print ' '.join(map(''.join, itertools.izip_longest(si, si, fillvalue='')))
#Python3:
print(' '.join(map(''.join, itertools.zip_longest(si, si, fillvalue=''))))
Mick

Re: string manipulation, leerzeichen einfügen

Verfasst: Montag 25. Oktober 2010, 05:59
von snafu
Findet alle Zahlenpaare und fügt sie mit Leerzeichen zusammen (falls eine Zahl übrig bleibt, wird sie "verschluckt"):

Code: Alles auswählen

' '.join(re.findall('\d{2}', s))
Hier wird bei einer ungeraden Anzahl von Stellen die übriggebliebene Zahl angehangen:

Code: Alles auswählen

' '.join(re.findall('\d{1,2}', s))
Sofern man weitere Zeichen, die keine Zahlen sind, im String hat, sollte man aber wohl den Ansatz von sma verfolgen, weil dort nichts verschluckt werden kann.

Re: string manipulation, leerzeichen einfügen

Verfasst: Montag 25. Oktober 2010, 23:34
von bords0

Code: Alles auswählen

>>> si = iter(s)
>>> ' '.join(c + next(si) for c in si)
'12 34 56 78'

Re: string manipulation, leerzeichen einfügen

Verfasst: Dienstag 26. Oktober 2010, 00:12
von pillmuncher
@bords0: Deine Lösung gefällt mir gut, sie scheitert aber leider an s = '123456789'. Obwohl -- der OP hat über diesen Fall nichts geschrieben...

Re: string manipulation, leerzeichen einfügen

Verfasst: Dienstag 26. Oktober 2010, 05:39
von snafu
Wenn man das ganze als Stream ansieht, könnte man natürlich auch den "`iter()`-Trick" anwenden:

Code: Alles auswählen

>>> from StringIO import StringIO
>>> s = StringIO('123456789')
>>> ' '.join(iter(lambda: s.read(2), ''))
'12 34 56 78 9'

Re: string manipulation, leerzeichen einfügen

Verfasst: Dienstag 26. Oktober 2010, 14:55
von Dav1d
Ähnlich wie pillmuncher, nur ohne iter:

Code: Alles auswählen

print ' '.join(map(''.join, izip_longest(s[::2], s[1::2], fillvalue='')))

Re: string manipulation, leerzeichen einfügen

Verfasst: Dienstag 26. Oktober 2010, 15:06
von Xynon1
Besonders schön sehen die Lösungen alle nicht aus, geht warscheinlich auch nicht besser.
Aber welche ist die schnellste ?

Re: string manipulation, leerzeichen einfügen

Verfasst: Dienstag 26. Oktober 2010, 15:15
von BlackJack
Ich würde wohl als "einfachste", "lesbarste" Lösung das hier nehmen:

Code: Alles auswählen

In [83]: ' '.join(s[i:i + 2] for i in xrange(0, len(s), 2))
Out[83]: '12 34 56 78'
In einer Funktion verpackt, bei der die 2 ein Argument ist.