запуск цикла до произвольного индекса (python 3.x)

#python-3.x #for-loop #indexing

Вопрос:

Итак, у меня есть эти строки, которые я разделил пробелами ( »), и я просто свернул их в один список, который я назвал «keyLabelRun», так что это выглядит так:

Запуск ключевых меток[0-12]:

 0 OS=Dengue
1 virus
2 3
3 PE=4
4 SV=1
5 Split=0
6
7 OS=Bacillus
8 subtilis
9 XF-1
10 GN=opuBA
11 PE=4
12 SV=1
 

Мне нужны только элементы, которые включают и находятся после «OS=», что-нибудь еще, будь то «SV=» или «PE=» и т.д. Я хочу пропустить эти элементы, пока не перейду к следующему «OS=».

Количество элементов для следующего «OS=» произвольно, так что вот где у меня проблема.

Это то, что я сейчас пытаюсь сделать:

 OSarr = []
for i in range(len(keyLabelrun)):
    if keyLabelrun[i].count('OS='):
        OSarr.append(keyLabelrun[i])
        if keyLabelrun[i 1].count('=') != 1: 
            continue
 

Но я думаю, что меня сбивают с толку элементы, в которых «OS=» не включена.

Кроме того, в конце я собираюсь объединить их всех вместе в их собственных элементах, но я чувствую, что смогу справиться с этим после этого.

В своей попытке я пытаюсь добавить все элементы, которые я ищу, в новый список «OSarr»

Если кто-нибудь сможет помочь, мы будем очень признательны. Спасибо.

Этот список строк взят из набора данных, представляющего собой текстовый файл в виде:

 >tr|W0FSK4|W0FSK4_9FLAV Genome polyprotein (Fragment) OS=Dengue virus 3 PE=4 SV=1 Split=0 
MNNQRKKTGKPSINMLKRVRNRVSTGSQLAKRFSKGLLNGQGPMKLVMAFIAFLRFLAIPPTAGVLARWGTFKKSGAIKVLKGFKKEISNMLSIINKRKKTSLCLMMILPAALAFHLTSRDGEPRMIVGKNERGKSLLFKTASGINMCTLIAMDLGEMCDDTVTYKCPHITEVEPEDIDCWCNLTSTWVTYGTCNQAGEHRRDKRSVALAPHVGMGLDTRTQTWMSAEGAWRQVEKVETWALRHPGFTILALFLAHYIGTSLTQKVVIFILLMLVTPSMTMRCVGVGNRDFVEGLSGATWVDVVLEHGGCVTTMAKNKPTLDIELQKTEATQLATLRKLCIEGKITNITTDSRCPTQGEATLPEEQDQNYVCKHTYVDRGWGNGCGLFGKGSLVTCAKFQCLEPIEGKVVQYENLKYTVIITVHTGDQHQVGNETQGVTAEITPQASTTEAILPEYGTLGLECSPRTGLDFNEMILLTMKNKAWMVHRQWFFDLPLPWTSGATTETPTWNRKELLVTFKNAHAKKQEVVVLGSQEGAMHTALTGATEIQNSGGTSIFAGHLKCRLKMDKLELKGMSYAMCTNTFVLKKEVSETQHGTILIKVEYKGEDVPCKIPFSTEDGQGKAHNGRLITANPVVTKKEEPVNIEAEPPFGESNIVIGIGDNALKINWYKKGSSIGKMFEATARGARRMAILGDTAWDFGSVGGVLNSLGKMVHQIFGSAYTALFSGVSWVMKIGIGVLLTWIGLNSKNTSMSFSCIAIGIITLYLGAVVQADMGCVINWKGKELKCGSGIFVTNEVHTWTEQYKFQADSPKRLATAIAGAWENGVCGIRSTTRMENLLWKQIANELNYILWENNIKLTVVVGDIIGVLEQGKRTLTPQPMELKYSWKTWGKAKIVTAETQNSSFIIDGPNTPECPSVSRAWNVWEVEDYGFGVFTTNIWLKLREVYTQLCDHRLMSAAVKDERAVHADMGYWIESQKNGSWKLEKASLIEVKTCTWPKSHTLWSNGVLESDMIIPKSLAGPISQHNHRPGYHTQTAGPWHLGKLELDFNYCEGTTVVITENCGTRGPSLRTTTVSGKLIHEWCCRSCTLPPLRYMGEDGCWYGMEIRPISEKEENMVKSLVSAGSGKVDNFTMGVLCLAILFEEVMRGKFGKKHMIAGVFFTFVLLLSGQITWRDMAHTLIMIGSNASDRMGMGVTYLALIATFKIQPFLALGFFLRKLTSRENLLLGVGLAMATTLQLPEDIEQMANGIALGLMALKLITQFETYQLWTALISLTCSNTIFTLTVAWRTATLILAGVSLLPVCQSSSMRKTDWLPMAVAAMGVPPLPLFIFGLKDTLKRRSWPLNEGVMAVGLVSILASSLLRNDVPMAGPLVAGGLLIACYVITGTSADLTVEKAADITWEEEAEQTGVSHNLMITVDDDGTMRIKDDETENILTVLLKTALLIVSGIFPYSIPATLLVWHTWQKQTQRSGVLWDVPSPPETQKAELEEGVYRIKQQGIFGKTQVGVGVQKEGVFHTMWHVTRGAVLTYNGKRLEPNWASVKKDLISYGGGWRLSAQWQKGEEVQVIAVEPGKNPKNFQTMPGTFQTTTGEIGAIALDFKPGTSGSPIINREGKVVGLYGNGVVTKNGGYVSGIAQTNAEPDGPTPELEEEMFKKRNLTIMDLHPGSGKTRKYLPAIVREAIKRRLRTLILAPTRVVAAEMEEALKGLPIRYQTTATKSEHTGREIVDLMCHATFTMRLLSPVRVPNYNLIIMDEAHFTDPASIAARGYISTRVGMGEAAAIFMTATPPGTADAFPQSNAPIQDEERDIPERSWNSGNEWITDFAGKTVWFVPSIKAGNDIANCLRKNGKKVIQLSRKTFDTEYQKTKLNDWDFVV
>tr|M4KW32|M4KW32_BACIU Choline ABC transporter (ATP-binding protein) OS=Bacillus subtilis XF-1 GN=opuBA PE=4 SV=1 Split=0 
MLTLENVSKTYKGGKKAVNNVNLKIAKGEFICFIGPSGCGKTTTMKMINRLIEPSAGKIFIDGENIMDQDPVELRRKIGYVIQQIGLFPHMTIQQNISLVPKLLKWPEQQRKERARELLKLVDMGPEYVDRYPHELSGGQQQRIGVLRALAAEPPLILMDEPFGALDPITRDSLQEEFKKLQKTLHKTIVFVTHDMDEAIKLADRIVILKAGEIVQVGTPDDILRNPADEFVEEFIGKERLIQSSSPDVERVDQIMNTQPVTITADKTLSEAIQLMRQERVDSLLVVDDEHVLQGYVDVEIIDQCRKKANLIGEVLHEDIYTVLGGTLLRDTVRKILKRGVKYVPVVDEDRRLIGIVTRASLVDIVYDSLWGEEKQLAALS
>sp|Q8AWH3|SX17A_XENTR Transcription factor Sox-17-alpha OS=Xenopus tropicalis GN=sox17a PE=2 SV=1 Split=0 
MSSPDGGYASDDQNQGKCSVPIMMTGLGQCQWAEPMNSLGEGKLKSDAGSANSRGKAEARIRRPMNAFMVWAKDERKRLAQQNPDLHNAELSKMLGKSWKALTLAEKRPFVEEAERLRVQHMQDHPNYKYRPRRRKQVKRMKRADTGFMHMAEPPESAVLGTDGRMCLESFSLGYHEQTYPHSQLPQGSHYREPQAMAPHYDGYSLPTPESSPLDLAEADPVFFTSPPQDECQMMPYSYNASYTHQQNSGASMLVRQMPQAEQMGQGSPVQGMMGCQSSPQMYYGQMYLPGSARHHQLPQAGQNSPPPEAQQMGRADHIQQVDMLAEVDRTEFEQYLSYVAKSDLGMHYHGQESVVPTADNGPISSVLSDASTAVYYCNYPSA
 

Комментарии:

1. Как вы создали эту входную строку? Его синтаксис проблематичен, поскольку он использует запятые для разделения сегментов и элементов внутри сегмента. Это затрудняет анализ.

2. Запятые просто указывают на следующий элемент. Я не был уверен, как это отформатировать в своем вопросе. Я постараюсь изложить это в таблице.

3. Если возможно, добавьте данные (или их небольшое подмножество) таким образом, чтобы их можно было скопировать и вставить для более легкой воспроизводимости

4. из набора данных или из списка «keyLabelRun» (массив python)?

5. Я добавил образец набора данных в нижнюю часть поста

Ответ №1:

Я понял! 😀

 OSarr = []
G = 0
for i in range(len(keyLabelrun)):
    OSarr.append(keyLabelrun[G])
    G  = 1
    if keyLabelrun[G].count('='):
        while keyLabelrun[G].count('OS=') != 1:
            G =1
 

Может быть, в следующий раз все, спасибо вам!

Ответ №2:

Из-за синтаксиса вы должны отслеживать, какую часть (ОС, PE и т. Д.) вы в настоящее время анализируете. Вот функция для извлечения названия вида из заголовка FASTA:

 def extract_species(description):
    species_parts = []
    is_os = False
    for word in description.split():
        if word[:3] == 'OS=':
            is_os = True
            species_parts.append(word[3:])
        elif '=' in word:
            is_os = False
        elif is_os:
            species_parts.append(word)

    return ' '.join(species_parts)
 

Вы можете вызвать его при обработке входного файла, например:

 from Bio import SeqIO

for record in SeqIO.parse('input.fa', 'fasta'):
    species = extract_species(record.description)
 

Комментарии:

1. лол, почему ты просто не сказал «для этого может быть функция био-питона»? xDD

2. Я совсем забыл о биоПитоне 😅 😅

3. вы вызываете его, одновременно используя функцию bioPython?

4. моей версии bioPython не нравится «rec.description.split()»

5. @NormanSabin извините, у меня было неправильное имя переменной из предыдущей версии. Теперь исправлено.