Python - lists in proteoomanalyse

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • 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.

Afbeeldingslocatie: https://tweakers.net/i/4JMr5NfyTxAn_Fac2nOpi1EXKDc=/800x/filters:strip_exif()/f/image/T3ZCg6jkB9QEAZrFM9V8azWX.png?f=fotoalbum_large

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
  • Nu online
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


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:39
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
  • +1 Henk 'm!

  • Ben(V)
  • Registratie: December 2013
  • Nu online
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.