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.
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
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"):
Hier wird bei einer ungeraden Anzahl von Stellen die übriggebliebene Zahl angehangen:
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.