Я занимаюсь исследованием биоинформатики, и я новичок в python. Я написал этот код для интерпретации файла, содержащего последовательности белка. Файл «bulk_sequences.txt» содержит 71 423 строки информации внутри себя. Три строки относятся к одной последовательности белка, эта первая строка дает информацию, включая год, в который был найден белок (вот что такое материал «/ 1945»). «С меньшим образцом из 1000 строк он работает отлично.Есть ли способ упростить этот код?
Он предназначен для сортировки файла, сортировки его по годам обнаружения, сортировки по нему, а затем назначить все три линии данных последовательности белка к элементу в массиве «sortedsqncs»
import time
start = time.time()
file = open("bulk_sequences.txt", "r")
fileread = file.read()
bulksqncs = fileread.split("\n")
year = 1933
newarray = []
years = []
thirties = ["/1933","/1934","/1935","/1936","/1937","/1938","/1939","/1940","/1941","/1942"]## years[0]
forties = ["/1943","/1944","/1945","/1946","/1947","/1948","/1949","/1950","/1951","/1952"]## years[1]
fifties = ["/1953","/1954","/1955","/1956","/1957","/1958","/1959","/1960","/1961","/1962"]## years[2]
sixties = ["/1963","/1964","/1965","/1966","/1967","/1968","/1969","/1970","/1971","/1972"]## years[3]
seventies = ["/1973","/1974","/1975","/1976","/1977","/1978","/1979","/1980","/1981","/1982"]## years[4]
eighties = ["/1983","/1984","/1985","/1986","/1987","/1988","/1989","/1990","/1991","/1992"]## years[5]
nineties = ["/1993","/1994","/1995","/1996","/1997","/1998","/1999","/2000","/2001","/2002"]## years[6]
twothsnds = ["/2003","/2004","/2005","/2006","/2007","/2008","/2009","/2010","/2011","/2012"]## years[7]
years = [thirties,forties,fifties,sixties,seventies,eighties,nineties,twothsnds]
count = 0
sortedsqncs = []
for x in range(len(years)):
for i in range(len(years[x])):
for y in bulksqncs:
if years[x][i] in y:
for n in range(len(bulksqncs)):
if y in bulksqncs[n]:
sortedsqncs.append(bulksqncs[n:n+3])
count +=1
print len(sortedsqncs)
end = time.time()
print round((end - start),4)
Это поможет, если вы предоставили несколько строк ввода и вывода. – Thomas
Используйте встроенный профилировщик python (http://stackoverflow.com/questions/582336/how-can-you-profile-a-python-script), чтобы выяснить, каковы ваши узкие места. Существуют ли определенные функции, занимающие большую часть времени? Можете ли вы сделать их быстрее? Кроме того, посмотрите, как вы зацикливаетесь ... это разумный способ петли над данными? Это похоже на чрезвычайно сложный цикл, поэтому вы могли бы сделать это гораздо быстрее. – Kitsune
Вы используете python 3 или 2? – smac89