2017-10-09 103 views
2

我想通過一個字符串來迭代,並確保該字符串僅包含這些字母的重複:「A」,「C」,「G」,「T」蟒蛇所有()通過串

>>>string = 'm' 
>>>nucleotide = ('A','C','G','T') 
>>>print(all(nucleotide for i in string)) 

這就是我輸入的內容,但輸出結果是真實的。這是爲什麼?

回答

4

您正在測試nucleotide是否爲空;你從不測試i

你不得不使用in實際上看,如果i是在元組:

all(i in nucleotide for i in string) 

它會更有效地使nucleotide一組:

nucleotide = {'A', 'C', 'G', 'T'} 

更有效的還是是使用正則表達式,此時整個測試用C代碼完成:

import re 

dna_bases = re.compile(r'^[ACGT]+$') 

print(dna_bases.fullmatch(string) is not None) # Python 3.4, use .match for earlier versions. 
+0

爲什麼使用're.search'和一個錨定正則表達式時,你可以使用're.match'來代替? 'search'試圖匹配字符串中每個位置的正則表達式,在這種情況下這是完全沒有意義的。在python 3.4中,你也可以放下'$'錨點並使用're.fullmatch'。 –

+0

@Rawing:我更喜歡在're.match()'上使用明確的錨點('^')。我不知道're.fullmatch()',至少比're.match()'隱式的'''錨點更有幫助。 –

+0

那麼,你仍然可以使用're.match'的明確的錨點。這是關於效率 - 're.search'掃描整個字符串,這是毫無意義的,因爲正則表達式錨定在開始處並且不會與其他地方匹配。在我的電腦上,使用500個字符的字符串時,re.search會減慢100倍。國際海事組織使用're.match'也使得它更清晰,你正在驗證字符串,而不是搜索它的東西。 –