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.
skanami
User
Beiträge: 23
Registriert: Donnerstag 11. Oktober 2007, 20:33
Kontaktdaten:

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

Beitragvon skanami » Montag 26. November 2007, 10:13

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:

Beitragvon skanami » Montag 26. November 2007, 10:15

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

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

Beitragvon gerold » Montag 26. November 2007, 10:22

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:

Beitragvon skanami » Montag 26. November 2007, 11:30

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Montag 26. November 2007, 11:50

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

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

Beitragvon Y0Gi » Montag 26. November 2007, 14:54

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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder