2
我想通過一個字符串來迭代,並確保該字符串僅包含這些字母的重複:「A」,「C」,「G」,「T」蟒蛇所有()通過串
>>>string = 'm'
>>>nucleotide = ('A','C','G','T')
>>>print(all(nucleotide for i in string))
這就是我輸入的內容,但輸出結果是真實的。這是爲什麼?
我想通過一個字符串來迭代,並確保該字符串僅包含這些字母的重複:「A」,「C」,「G」,「T」蟒蛇所有()通過串
>>>string = 'm'
>>>nucleotide = ('A','C','G','T')
>>>print(all(nucleotide for i in string))
這就是我輸入的內容,但輸出結果是真實的。這是爲什麼?
您正在測試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.
爲什麼使用're.search'和一個錨定正則表達式時,你可以使用're.match'來代替? 'search'試圖匹配字符串中每個位置的正則表達式,在這種情況下這是完全沒有意義的。在python 3.4中,你也可以放下'$'錨點並使用're.fullmatch'。 –
@Rawing:我更喜歡在're.match()'上使用明確的錨點('^')。我不知道're.fullmatch()',至少比're.match()'隱式的'''錨點更有幫助。 –
那麼,你仍然可以使用're.match'的明確的錨點。這是關於效率 - 're.search'掃描整個字符串,這是毫無意義的,因爲正則表達式錨定在開始處並且不會與其他地方匹配。在我的電腦上,使用500個字符的字符串時,re.search會減慢100倍。國際海事組織使用're.match'也使得它更清晰,你正在驗證字符串,而不是搜索它的東西。 –