У меня есть список под названием:
Фёрстсеквенсетосплит
и он содержит один элемент, который представляет собой последовательность ДНК, скажем:
'АТТТАГКТА'
Я могу легко вернуть длину этого элемента, чтобы пользователь знал, что он имеет длину 10 символов, и затем я хочу, чтобы пользователь сказал, что он хочет извлечь символы индекса, скажем [0:6], и чтобы затем создать два элемента в новом списке. Первый элемент содержит символы определяемого пользователем индекса, за которым следует вопросительный знак, заменяющий другие символы, которые не были извлечены, а второй элемент имеет инверсию.
Итак, чтобы проиллюстрировать, что я хочу, если пользователь сказал, что хочет [0:5], вы получите новый список со следующими элементами:
['АТТТТ?????', '?????ACGTA']
Все это часть гораздо более крупной проблемы, когда у меня есть набор последовательностей ДНК в формате FASTA («>Sequence1/nATTTTACGTA», «>Sequence2/nATTGCACGTA» и т. д.), и я хочу, чтобы пользователь мог выбрать последовательность на основе его идентификатор и чтобы эта последовательность была разделена на основе предопределенного ввода и называлась Sequence2a и Sequence2b ('>Sequence1a/n?????ACGTA', '>Sequence1b/nATTTT?????''>Sequence2/ nATTGCACGTA' и др.). В настоящее время я решил проблему, напечатав имена последовательностей, позволив пользователю выбрать одну для объединения, извлекая только последовательность (без идентификатора), а затем, как только я решу проблему, показанную выше, я создам новый список с новыми элементами.
Поскольку я новичок (и я уверен, что это уже очевидно!) Я был бы признателен за любые объяснения приведенного кода. Большое спасибо за любую возможную помощь, которую вы можете оказать
Мой код до сих пор:
import sys
import re
#Creating format so more user friendly
class color:
PURPLE = '\033[95m'
CYAN = '\033[96m'
DARKCYAN = '\033[36m'
BLUE = '\033[94m'
GREEN = '\033[92m'
YELLOW = '\033[93m'
RED = '\033[91m'
BOLD = '\033[94m'
UNDERLINE = '\033[4m'
END = '\033[0m'
fileName = raw_input("Give the name of the Fasta file you wish to divide up ")
# i.e TopTenFasta
#Reading in the sequences splitting them by the > symbol
in_file = open(fileName,"r")
sequences = in_file.read().split('>')[1:]
in_file.close()
#Putting all these sequences into a list
allSequences = []
for item in sequences:
allSequences.append(item)
#Letting you know how many sequences there are in total
NumberOfSequences = len(allSequences)
print color.BOLD + "The Number of Sequences in this list is: " +color.END, NumberOfSequences
#Returning the names of the IDs to allow you to decide which ones to split
SequenceIds = []
for x in allSequences:
SequenceIds.append(x[0:10])
print color.BOLD + "With the following names: " + color.END, "\n", "\n".join(SequenceIds)
#-----------------------Starting the Splice ------------------------------------
#-----------------------------------------------------------------------------
#------------------------------------------------------------------------------
#Choosing the sequence you wish to splice
FirstSequenceToSplitID = raw_input(color.BOLD + "Which sequence would you like to splice " + color.END)
#Seeing whether that item is in the list
for x in SequenceIds:
if FirstSequenceToSplitID == x:
print "valid input"
FirstSequenceToSplit = []
#making a new list (FirstSequenceToSplit) and putting into it just the sequence (no ID)
for listItem in allSequences:
if listItem[0:10]==FirstSequenceToSplitID:
FirstSequenceToSplit.append(listItem[11:])
#Printing the Length of the sequence to splice
for element in FirstSequenceToSplit:
print color.BOLD + "The Length of this sequence is" + color.END, len(element)