String in Blöcke teilen und in eine Liste einfügen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
skanami
User
Beiträge: 23
Registriert: Donnerstag 11. Oktober 2007, 20:33
Kontaktdaten:

Hallo allerseits,
ich sitze mittlerweile seit 2 tagen frustriert an einem kleinen Problem, und zwar einen String wie z.B. "AGTCCCGGTAAAGCGTAGTGCAGACGATT"
in eine Liste zu überführen die dann so aussieht :
['AGT', 'CCC', 'GGT', 'AAA', 'GCG', ...usw.
ich habs meistens mit einer normalen for schleife versucht:

for j in range(0, (len(pureseq)/3), 3):
b =list(pureseq).insert(j, "**")
print b

aber jedesmal wirft er mir mehrere Zeilen "None" aus?! Weiss da jemand Bescheid was ich da falsch mache? Wie könnte man es denn lösen? pureseq soll hier mein String sein.

Gruss[/list]
skanami
User
Beiträge: 23
Registriert: Donnerstag 11. Oktober 2007, 20:33
Kontaktdaten:

Achja, natürlich erstelle ich durch die 3 Zeilen noch nicht die fertige Liste aber wenn ich das hinbekomme, würde ich es einfach durch den .split("**") Befehl machen
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

skanami hat geschrieben:einen String wie z.B. "AGTCCCGGTAAAGCGTAGTGCAGACGATT"
in eine Liste zu überführen die dann so aussieht :
['AGT', 'CCC', 'GGT', 'AAA', 'GCG', ...usw.
Hallo skanami!

Hier die Variante mit einer einfachen For-Schleife:

Code: Alles auswählen

>>> s = "AGTCCCGGTAAAGCGTAGTGCAGACGATT"
>>> my_list = []
>>> for i in xrange(0, len(s), 3):
...     my_list.append(s[i:i+3])
...     
>>> my_list
['AGT', 'CCC', 'GGT', 'AAA', 'GCG', 'TAG', 'TGC', 'AGA', 'CGA', 'TT']
>>> 
EDIT:

Und hier noch eine Variante:

Code: Alles auswählen

my_list = [ s[i:i+3] for i in xrange(0, len(s), 3) ]
Und hier noch die speicherschonende Variante, die keine neue Liste erzeugt:

Code: Alles auswählen

>>> for item in ( s[i:i+3] for i in xrange(0, len(s), 3) ):
...     print item
...   

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
skanami
User
Beiträge: 23
Registriert: Donnerstag 11. Oktober 2007, 20:33
Kontaktdaten:

Jau, besten Dank, klappt.
Noch ne kurze Frage. Gib es bei listen auch eine Funktion wo man einen Item direkt austauschen kann ? wie beim String das replace ? hab im Tutorial von Rossum nichts dazu finden können.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

skanami hat geschrieben:Gib es bei listen auch eine Funktion wo man einen Item direkt austauschen kann? wie beim String das replace?
Hallo skanami!

Kommt darauf an, ob du so wie hier nach allen Vorkommen eines Eintrags suchen willst und diesen ersetzen möchtest...

Code: Alles auswählen

>>> my_list = ["a", "b", "b"]
>>> for index, item in enumerate(my_list):
...     if item == "b":
...         my_list[index] = "bb"
...     
>>> my_list
['a', 'bb', 'bb']
>>>
Oder ob du genau weißt, an welcher Stelle der Liste der Eintrag steckt:

Code: Alles auswählen

my_list[2] = "bb"
Oder ob du nur das erste Auftreten des Eintrages ersetzen möchtest:

Code: Alles auswählen

my_list[my_list.index("b")] = "bb"
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

gerold hat geschrieben:Und hier noch eine Variante:

Code: Alles auswählen

my_list = [ s[i:i+3] for i in xrange(0, len(s), 3) ]
Und hier noch die speicherschonende Variante, die keine neue Liste erzeugt:

Code: Alles auswählen

>>> for item in ( s[i:i+3] for i in xrange(0, len(s), 3) ):
...     print item
...   
Das "Schonen des Speichers" erreicht man auch, indem man bei der vorigen Variante die äußeren, eckigen Klammern durch runde Klammern ersetzt, wodurch man die List Comprehension zu einer Generator Expression macht.
Antworten