Zeichenfolge innerhalb einer Zeichenkette finden

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
vuotbien
User
Beiträge: 2
Registriert: Sonntag 19. Januar 2020, 19:43

Hallo zusammen,

ich bin absoluter Neuling in Python und versuche unterschiedliche Zeichenfolgen innerhalb einer Zeichenkette zu finden, z.B. die Zeichenfolgen "ATG" oder "AAT" oder "CGA" etc. sollen in der Zeichenkette "ATGCGCAATGCGATATACCTTACT" sequenziert werden.
Ich hatte folgendes geschrieben:

Zeichenkette="ATGCGCAATGCGATATAC"
if "ATG" or "AAT" or "CGA" in Zeichenkette:
print("Sequenz ist enthalten")
else: print ("Sequenz nicht enthalten")


Leider hat das nicht geklappt. Denn bei der Gegenprüfung mit der Suche nach "XXX" or "YYY" or "ZZZ" wird trotzdem die Meldung "Sequenz ist enthalten" ausgegeben.
Was habe ich falsch gemacht bzw. nicht berücksichtigt?

Danke für Eure Rückmeldung,

Vuotbien
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Code: Alles auswählen

zeichenkette = "XXXXXAATXXXXX"

strings_to_match = ["ATG", "AAT", "GCA"]
if any(string_matchcode in zeichenkette for string_matchcode in strings_to_match):
    print("Jo")
oder

Code: Alles auswählen

zeichenkette = "XXXXXXXXXXXX"


if "ATG" in zeichenkette or "AAT" in zeichenkette or "CGA" in zeichenkette:
    print("jo")
else:
    print("ne")
Zuletzt geändert von Jankie am Donnerstag 30. Januar 2020, 16:46, insgesamt 1-mal geändert.
Benutzeravatar
__blackjack__
User
Beiträge: 14051
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@vuotbien: Du hast nicht berücksichtigt das ``or`` ein binärer Operator ist und kein umgangsprachliches „oder“. Deine Bedingung ist *immer* wahr, weil als erstes "ATG" or "AAT" ausgeführt wird und *das* ist halt immer wahr, denn schon der erste Operand vom ``or``, das "ATG", ist wahr weil bei Zeichenketten (wie bei anderen Sequenztypen) nur eine leere Zeichenkette unwahr ist.

Wenn man da unnötige Klammern hinzufügen würde um zu zeigen in welcher Reihenfolge das ausgeführt wird, sähe das so aus:

Code: Alles auswählen

if a or b or c in X:
# =>
if (a or b) or (c in X):
Was Du eigentlich willst ist:

Code: Alles auswählen

if a in X or b in X or c in X:
oder:

Code: Alles auswählen

if any(x in X for x in [a, b, c]):
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Alternativ:

Code: Alles auswählen

import re

if re.search("ATG|AAT|CGA", dein_string):
    print("Gefunden")
else:
    print("Nicht gefunden")
vuotbien
User
Beiträge: 2
Registriert: Sonntag 19. Januar 2020, 19:43

Hallo zusammen,

vielen Dank für Erklärungen, das ist alles einleuchtend und genau das, was ich benötige :)

Grüße,
VB
Antworten