Seite 1 von 1

Zeichenfolge innerhalb einer Zeichenkette finden

Verfasst: Donnerstag 30. Januar 2020, 15:55
von vuotbien
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

Re: Zeichenfolge innerhalb einer Zeichenkette finden

Verfasst: Donnerstag 30. Januar 2020, 16:43
von Jankie

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")

Re: Zeichenfolge innerhalb einer Zeichenkette finden

Verfasst: Donnerstag 30. Januar 2020, 16:45
von __blackjack__
@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]):

Re: Zeichenfolge innerhalb einer Zeichenkette finden

Verfasst: Freitag 31. Januar 2020, 00:52
von snafu
Alternativ:

Code: Alles auswählen

import re

if re.search("ATG|AAT|CGA", dein_string):
    print("Gefunden")
else:
    print("Nicht gefunden")

Re: Zeichenfolge innerhalb einer Zeichenkette finden

Verfasst: Freitag 31. Januar 2020, 08:07
von vuotbien
Hallo zusammen,

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

Grüße,
VB