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.
a = "ABCDGT-Z"
b = "ACGT"
c = ""
for i in a:
if i in b:
c += i
else:
c += "a"
print c
Blackjack hat geschrieben:@problembär: Damit hältst Du bis jetzt wohl den ersten Platz für die schlechteste Laufzeit. In quadratischer Laufzeit eine Zeichenkette aufbauen und die lineare Suche in einer Zeichenkette…
Mit dem Einwand hab' ich gerechnet . So würd' ich's machen, wenn's einfach und gut lesbar sein soll. Wenn's schnell sein soll, würd ich's so machen:
Blackjack hat geschrieben:@problembär: Damit hältst Du bis jetzt wohl den ersten Platz für die schlechteste Laufzeit. In quadratischer Laufzeit eine Zeichenkette aufbauen und die lineare Suche in einer Zeichenkette…
Mit dem Einwand hab' ich gerechnet . So würd' ich's machen, wenn's einfach und gut lesbar sein soll.
In [14]: from string import maketrans
In [15]: text = "ABCDEFGT-"
In [16]: table = maketrans("BDEF", "aaaa")
In [17]: text.translate(table)
Out[17]: 'AaCaaaGT-'
(ok, das "maketrans" müßte man natürlich noch erweitern...)
problembär hat geschrieben:
Wenn's schnell sein soll, würd ich's so machen:
<C-Code>
Wobei Du auch dann noch quadratische Laufzeit hast...
global _transform
section .data
table: db 0, 0, 0, 0 ; ... 256 0/1-values wether the corresponding character
; code should be replaced by an 'a' or not.
section .text
_transform:
xor eax, eax
pop ebx
loop0:
mov al, [ebx]
cmp al, 0
je return
cmp byte [eax+table], 0
jne skip
mov byte [ebx], 'a'
skip:
inc ebx
jmp loop0
return:
ret
Adresse der Zeichenkette wird auf dem Stack erwartet.
Cool, läuft bei mir (nasm, SuSE 10.0) .
Obwohl ich (wie immer bei Assembler) nur Bahnhof verstehe ...
Zu Deinem Python-Vorschlag fand ich übrigens noch interessant, daß viele auch bei so einfacher Datenverarbeitung in Python recht bald mit Modulen arbeiten. Spricht ja nichts dagegen, überrascht mich nur etwas .
problembär hat geschrieben:Zu Deinem Python-Vorschlag fand ich übrigens noch interessant, daß viele auch bei so einfacher Datenverarbeitung in Python recht bald mit Modulen arbeiten. Spricht ja nichts dagegen, überrascht mich nur etwas .
Natürlich - warum auch Sachen selbst amchen wenn man einfach Module nutzen kann deren Verwendung nahezu keine Kosten hat.
Die Assembler-Lösung finde ich fein. ``je`` ist natürlich Jump Equal, ``jne`` ist das Gegenteil. Der Transform-Teil verwundert mich ein wenig, aber ich schätze mal dass so die Parameter entgegengenommen werden, also liegt der String in ``ebx`` und wird auf den Stack kopiert. Schade dass bei uns in der Uni nur uninteressante Aufgaben in Assembler gegeben wurden.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
@Leonidas: Ja naja, es steht ja "ungetestet" dran. Über die Parameterübergabe wunderst Du Dich zurecht, denn ganz oben auf dem Stapel steht natürlich die Rücksprungadresse. Argh. Ausserdem muss der Aufgerufene Code beim `gcc` das `ebx`-Register am Ende wieder in den ursprünglichen Zustand versetzen. Mit dem `ecx`-Register kann man dagegen machen was man will. Also hier das Ganze noch einmal in funktionierend: http://paste.pocoo.org/show/164572/