liste→ ab einen bestimmten Index anfangen zu funktionieren

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
zerokrezan
User
Beiträge: 8
Registriert: Sonntag 16. Juni 2019, 19:21

```
def corona(data,lenght,abstand,temperatur):
file = open('/home/rezan/Downloads/MSA_SARS2_20200329.consensus.fasta','r')
list = []
list1 = []

for i in file:
ls = i.strip()
list.append(ls)

for l in i:
list1.append(l.strip())
while '' in list1:
list1.remove('')
while '' in list:
list1.remove('')

temp = temperatur
for w in list:
if temp == 2* w[0:laenge].count('A') + 2* w[:laenge].count('T') + 4* w[0:laenge].count('G') + 4* w[0:laenge].count('C'):
print((w[0:laenge]))



corona('/home/rezan/Downloads/MSA_SARS2_20200329.consensus.fasta',20,150,60)

#Ich bekam das hier als Output:

CCGGGTGTGANCGAAAGGTA
TTCGGANGCTCGAACTGCAC
AGGCATTCAGTACGGTCGTA
TGATGGCTACCCTCTTGAGT
CACTTTGTCCGAACAACTGG
CACACTCAAAGGCNGTGCAC
TGTTGTGGCAGATGCTGTCA
GGGTGTTTTAACTGCTGTGG
GGGTGTGGTTGATTATGGTG
AATGGCCCCGATTTCAGCTA
TGCAACTGCAGAAGCTGAAC
TATTTCAGCAGCTCGGCAAG
TCTCGCAAAGGCTCTCAATG
AGTTCATGCTGGCACAGACT
AATGCTGGACAACAGGGCAA
TGATGCAGCCATGCAACGTA
GGCTAGATTCCCTAAGAGTG
TACACAATGGCAGACCTCGT
TTCATACAAACCACGCCAGG
TGCAATGCTCCAGGTTGTGA
GGTAAACCTAGACCACCACT
GACACTGTGAGTGCTTTGGT
CTATGTGATAGACGTGCCAC
CTTCACGACATTGGTAACCC
GACAGTCCATGTGAGTCTCA
GATGCGCAAACAGGTTCATC
AAAGGAGTTGCACCAGGTAC
AGGGGTACTGCTGTTATGTC
GACCCAGTCCCTACTTATTG
GAACTTCACAACTGCTCCTG
GCACAAGCTGATGAGTACGA
GTTTGGTGGACCCTCAGATT
CACTCAACATGGCAAGGAAG
CAATAGCAGTCCAGATGACC
GGGAGCCTTGAATACACCAA
GAAGCCTCGGCAAAAACGTA
#
#Ich möchte das Python mit dem 150. Element in der Liste erst anfängt die Möglichkeiten mit der Länge 20 zu printen.
Kann mir jemand dabei behilflich sein?
Danke im Voraus!#
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Bitte setze deinen Code in Code-Tags. Sie werden automatisch eingefügt, wenn du im "Vollständigen Editor & Vorschau" auf den </> Button drückst. Dazwischen gehört Code.

Ohne ihn ausprobiert zu haben: Ich denke nicht, dass der Code läuft. Zumindest sehe ich nirgends, dass laenge definiert wird.

Du verwendest in Coder bereits Slicing - allerdings wirkt das etwas seltsam, aber ohne zu wissen, was laenge ist, kann man nicht sage m , ob was grundsätzlich falsch ist.

Und da du ja bereits Slicing verwendest, solltest du dir dekne Frage eigentlich selbst beantworten können.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Durch die Wahl Deiner Variablenname ist der Code quasi unverständlich. i für eine Zeile, ls für eine Zeile? l für ein Zeichen? list und list1? Zum Glück wird list1 gar nicht verwendet.
Nichtsagende einbuchstabige oder generische Variablennamen sind ein deutlicher Hinweis darauf, dass man gar nicht weiß, was man da schreibt; geht auch gar nicht, weil sich das Hirn ständig verrenken muß. Warum nennst Du temperatur in temp um?
`data`, `lenght` und `abstand` werden gar nicht benutzt. `laenge` ist nirgends definiert.
Du solltest Dich auch entscheiden, ob Du englisch oder deutsch benutzt.
Dateien, die man öffnet, sollte man auch wieder schließe, am besten mit dem with-Statement.
Bei Text-Dateien sollte man immer ein Encoding angeben.

Code: Alles auswählen

def corona(filename, length, distance, temperature):
    with open(filename, encoding='utf8') as lines:
        for line in lines:
            entry = line[:length]
            temperature_from_entry = 2 * (entry.count('A') + entry.count('T')) + 4 * (entry.count('G') + entry.count('C'))
            if temperature = temperature_from_entry:
                print(entry)
Die eigentliche Frage verstehe ich nicht, was das Python denn nun machen soll. Du willst, dass die ersten 150 Zeilen ignoriert werden? Dann überlies die ersten 150-Zeilen einfach. Oder sollen die ersten 150 Zeilen, auf die die Bedingung zutrifft, ignoriert werden?
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Kleine Variation mit `collections.Counter`:

Code: Alles auswählen

#!/usr/bin/env python3
from collections import Counter
from pathlib import Path


def corona(filename, length, distance, temperature):
    with open(filename, encoding="utf-8") as lines:
        for line in lines:
            entry = line[:length]
            histogram = Counter(entry)
            if temperature == 2 * (histogram["A"] + histogram["T"]) + 4 * (
                histogram["G"] + histogram["C"]
            ):
                print(entry)


def main():
    corona(
        Path.home() / "Downloads" / "MSA_SARS2_20200329.consensus.fasta",
        20,
        150,
        60,
    )


if __name__ == "__main__":
    main()
Wobei das natürlich eine komische Art ist FASTA-Daten zu verarbeiten. Es wird hier nicht zwischen Zeilen unterschieden die Kommentare, Beschreibungen, oder Sequenzdaten enthalten, und es gibt keine verbindliche Zeilenlänge. Nur die Empfehlung das Zeilen nicht mehr als 80 Zeichen enthalten sollten. Wenn man da also von jeder Zeile die ersten `length` Zeichen verarbeitet, dann ist die Schrittweite zwischen den verarbeiteten Sequenzabschnitten im Grunde zufällig, weil sie davon abhängig ist wie lang die Zeilen jeweils sind. Falls die Zeilenlänge kürzer als `length` ist, dann werden zwar alle Daten verarbeitet, die Abschnitte sind aber kürzer als `length`.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten