解決方案:
pattern = 'AAA'
with open('practice_data.txt') as f_dna:
dna_list = [sequence for line in f_dna for sequence in line.split()]
print(smallest_distance(pattern, dna_list))
說明:
你是接近的解決方案,但你需要通過split()
到remplace strip()
- >strip()
刪除多餘的字符,所以你strip('\n')
是一個很好的猜測。 但由於\n
是在該行的結束,因爲這是算作一個delimitor拆分將自動擺脫它
如
>>> 'test\ntest'.split()
>>> ['test', 'test']
>>> 'test\n'.split()
>>> ['test']
現在,你必須通過列表之間的簡單相加remplace .append()
自分割以來的操作返回list
。
DNA = open('practice_data.txt')
empty = []
for lines in DNA:
line = lines.split()
empty += line
但,還有在你的代碼中的一些問題:
這是更好地使用with
聲明在打開一個文件,因爲它會自動處理異常,並在年底關閉文件描述符:
empty = []
with open('practice_data.txt') as DNA:
for lines in DNA:
line = lines.split()
empty += line
你的代碼現在很好,你仍然可以使用重構列表理解(Python中很常見)
with open('practice_data.txt') as DNA:
empty = [sequence for line in DNA for sequence in line.split()]
如果您對此有所瞭解,嘗試以重新組織它循環
empty = []
with open('practice_data.txt') as DNA:
for line in DNA:
for sequence in line.split():
empty.append(sequence)
注意:@MrGeek解決方案工作,但作爲兩個主要的默認設置:
- ,因爲它沒有使用
with
聲明,該文件是永遠不會關閉,導致內存問題,
- 使用
.read().splitlines()
將加載內存中的文件的所有內容,這可能導致MemoryError
例外,如果該文件太大。
走得更遠,處理大文件:
,你必須充滿DNA序列的1GO文件,即使你不加載在內存中的所有文件
現在成像,你仍然有巨大的dict
,更好的初步實踐將創造結果的另一個文件,並處理對飛你的DNA:
如
pattern = 'AAA'
with open('practice_data.txt') as f_dna, open('result.txt', 'w') as f_result:
for line in DNA:
for sequence in line.split():
result = smallest_distance(pattern, sequence)
f_result.write(result)
警告:您將不得不確保您的功能smallest_distance
接受string
而不是list
。
如果不可能,您可能需要處理批處理,但由於它有點複雜,所以我不會在此討論這個問題。現在
可以使用例如genetor功能,提高可讀性
def extract_sequence(file, pattern):
for line in file:
for sequence in line.split():
yield smallest_distance(pattern, sequence)
pattern = 'AAA'
with open('practice_data.txt') as f_dna, open('result.txt', 'w') as f_result:
for result in extract_sequence(f_dna, pattern):
f_result.write(result)
請給practice_data.txt重構了一下。您可以在gist.github.com上發帖,並將鏈接提供給我們。 –
'for'循環消耗'DNA'。如果你評論它,它不會。這可能會影響'smallest_distance(pattern,DNA)'調用。 – janos
[你可能對這個CodeReview問題感興趣](https://codereview.stackexchange.com/questions/135217/matlab-implementation-of-needleman-wunsch-algorithm) –