String in Buchstaben-Paare zerlegen
Verfasst: Dienstag 7. Oktober 2008, 00:46
Code: Alles auswählen
string = 'Rotlichtphasen'
for i in range(1,len(string)):
print string[i-1:i+1]
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Code: Alles auswählen
string = 'Rotlichtphasen'
for i in range(1,len(string)):
print string[i-1:i+1]
Code: Alles auswählen
In [77]: string = "Rotlichphasen"
In [78]: for i in xrange(len(string)):
print string[i-1:i+1]
Code: Alles auswählen
>>> string = "Rotlichphasen"
>>> a = [x + y for x, y in zip(string, string[1:])]
>>> a
['Ro', 'ot', 'tl', 'li', 'ic', 'ch', 'hp', 'ph', 'ha', 'as', 'se', 'en']
Code: Alles auswählen
from itertools import izip, tee
def iter_pair_window(iterable):
a, b = tee(iterable)
b.next() # Skip one item.
return izip(a, b)
def main():
string = 'Rotlichtphasen'
for a, b in iter_pair_window(string):
print a + b
Super, danke.str1442 hat geschrieben:Code: Alles auswählen
[x + y for x, y in zip(string, string[1:])]
Willst du wirklich die Buchstaben doppelt?__marcus__ hat geschrieben:Super, danke.str1442 hat geschrieben:Code: Alles auswählen
[x + y for x, y in zip(string, string[1:])]
Code: Alles auswählen
s="Rotlichtphasen"
for i in xrange(0,len(s),2):
print "%s" % s[i:i+2]
Code: Alles auswählen
[string[i:i + 2] for i in xrange(len(string) - 1)]
oderQubit hat geschrieben:Willst du wirklich die Buchstaben doppelt?__marcus__ hat geschrieben:Super, danke.str1442 hat geschrieben:Code: Alles auswählen
[x + y for x, y in zip(string, string[1:])]
Ansonsten war dein Ansatz doch nicht schlecht(?):Code: Alles auswählen
s="Rotlichtphasen" for i in xrange(0,len(s),2): print "%s" % s[i:i+2]
Code: Alles auswählen
[s[i:i+2] for i in xrange(0,len(s),2)]
Es kommt bei mir natürlich nicht so sehr auf Geschwindigkeit an, dass Nanosekunden wichtig wären. Es ging mehr darum zu sehen, wie man es noch machen könnte, weil ich mich mit zip, reduce + co eher schwer tue.BlackJack hat geschrieben:Als Anmerkung: An Deinem originalen Quelltext gibt's eigentlich nichts auszusetzen. Insbesondere wird dort wesentlich weniger Arbeit und Speicher verschwendet als bei den Lösungen von str1442 und mir. Auch Deins kann man als "list comprehension" oder Generatorausdruck schreiben, wenn man möchte:
Hier werden nur ``n = len(string) - 1`` neue Zeichenketten erzeugt.Code: Alles auswählen
[string[i:i + 2] for i in xrange(len(string) - 1)]
Bei der Lösung mit `zip()` wird erst die Zeichenkette bis auf das erste Byte kopiert, dann werden `n` Tupel mit jeweils zwei Zeichenketten erzeugt, die dann zu einer weiteren Zeichenkette zusammen gefügt werden.
Was betrachtest du denn beim Programmieren als "Vorteil" eines Konzepts gegenüber einem anderen?__marcus__ hat geschrieben: Hätte denn diese Version die ja vom Aufbau der ursprünglichen doch sehr ähnelt, der gegenüber Vorteile?