Seite 1 von 1

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

Verfasst: Montag 26. November 2007, 10:13
von skanami
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]

Verfasst: Montag 26. November 2007, 10:15
von skanami
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

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

Verfasst: Montag 26. November 2007, 10:22
von gerold
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
:-)

Verfasst: Montag 26. November 2007, 11:30
von skanami
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.

Verfasst: Montag 26. November 2007, 11:50
von gerold
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
:-)

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

Verfasst: Montag 26. November 2007, 14:54
von Y0Gi
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.