Toon posts:

Python - lists in proteoomanalyse

Pagina: 1
Acties:

Onderwerpen

Vraag


  • Noordpoollicht
  • Registratie: December 2022
  • Laatst online: 19-12-2022
Ik probeer de proteïne met de grootste glutamine zuur (E) inhoud te zoeken in een '.fasta'-file van het hele proteoom van een organisme a.d.h.v. een python 3.10.7 script (in IDLE Shell).

Ik wou dus lists maken met in de ene de identifiers van de proteïnen, en in de andere de sequenties van de proteïnen. Dit was lastig, zeker en vast voor een beginner zoals ik, omdat de file er ongeveer zo uitziet:

>ID proteïne 1
AASTTWWYEKKLALKLASWEWWTRRKKK...
KKLASTTEEWTWKKLLIISILSWWTYEILKK...
...
>ID proteïne 2
KKLASTTEEWTWKKLLIISILSWWTYEILKK...
AASTTWWYEKKLALKLASWEWWTRRKKK...
..
>ID proteïne 3
...
etc.

Dit heb ik proberen doen met wat er op de afbeelding in bijlage staat.



Het probleem dat nu optreed is dat het eerste element van de lijst leeg is, en dat de laatste sequentie van de file niet in de lijst staat. Ik vermoed dat het te maken heeft met het feit dat ik de code zo proberen schrijven heb dat de loop telkens eindigd als het het '>'-symbool tegenkomt.

Mijn vraag is dus of er een manier is om die laatste sequentie ook in de lijst te krijgen?
Alvast bedankt voor jullie antwoorden!

Beste antwoord (via Noordpoollicht op 18-12-2022 15:22)


  • Ben(V)
  • Registratie: December 2013
  • Laatst online: 22:28
Twee verschillende list loop je het risico dat de boel uit sync gaat.

Gebruik een dict met als key het ID en als values de twee waarden.
Sorteer de dict met sorted() en itemgetter op een van de twee waarden.

Als alternatief kun je een list of lists maken en sorteren, maar een dict is netter.

Met deze key woorden kun je wel even googlen hoe dat moet.

[Voor 13% gewijzigd door Ben(V) op 18-12-2022 10:29]

All truth passes through three stages: First it is ridiculed, second it is violently opposed and third it is accepted as being self-evident.

Alle reacties


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 17:53
Kun je je code alsjeblieft tussen [code=Python]...[/code] tags posten in plaats van als slecht-geknipt plaatje?

Inhoudelijk: er zijn verschillende manier om het op te lossen, maar het makkelijkste is waarschijnlijk om in het eerste deel van de if-statement beide arrays te updaten:

code:
1
2
ID.append(line)
volledige_sequenties.append("")


Dit garandeert dat ID en volledige_sequenties altijd dezelfde lengte hebben. En dan in de else-clausule doe je:

code:
1
volledige_sequenties[-1] += str(line[:-1])


Waarmee je de huidige regel aan de laatste sequentie toevoegt. (a[-1] refereert aan het laatste element van een array in Python, a[-2] aan het op-één-na-laatste, enzovoorts.)

Overigens kun je beter line.strip() gebruiken om trailing whitespace te verwijderen (het kan zijn dat de laatste regel in het bestand niet eindigt met een newline, en dan verwijder je dus een letter met je string slice) en line zou al een string moeten zijn (tenzij je de invoer in binary mode opent met "rb" i.p.v. "r") dus is de conversie met str() onnodig.

(Bovenstaande aanpak heeft overigens nog wel een mogelijk performance probleem omdat het feitelijk een Shlemiel the Painter algoritme is, maar gezien het niveau van je vraag denk ik dat dat niet aan je besteed is.)

[Voor 23% gewijzigd door Soultaker op 17-12-2022 18:59]


Acties:
  • Beste antwoord
  • +1Henk 'm!

  • Ben(V)
  • Registratie: December 2013
  • Laatst online: 22:28
Twee verschillende list loop je het risico dat de boel uit sync gaat.

Gebruik een dict met als key het ID en als values de twee waarden.
Sorteer de dict met sorted() en itemgetter op een van de twee waarden.

Als alternatief kun je een list of lists maken en sorteren, maar een dict is netter.

Met deze key woorden kun je wel even googlen hoe dat moet.

[Voor 13% gewijzigd door Ben(V) op 18-12-2022 10:29]

All truth passes through three stages: First it is ridiculed, second it is violently opposed and third it is accepted as being self-evident.



Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee