我有一個簡單的代碼,用于從某個文本中查找多個模式匹配(專門用于 DNA 序列模式匹配)
text = "CTGATTCC"
pattern = "ATT", "CT", "TTT"
set = []
for x in pattern:
for i in range(0, len(text)-len(x) 1):
if text[i:(i len(x))] == x:
set.append(i 1)
print("Positions:", set)
代碼已經設定,但我想嘗試是否可以"Pattern is not found"為文本中找不到的模式列印代碼。我不知道將它放在回圈中的哪個位置。任何想法都會有幫助!
uj5u.com熱心網友回復:
您可以為每個模式使用一個臨時串列,然后驗證您是否找到它
values = []
for x in pattern:
sub_values = []
for i in range(0, len(text) - len(x) 1):
if text[i:i len(x)] == x:
sub_values.append((x, i 1))
if sub_values:
values.extend(sub_values)
else:
print("Pattern", x, "not found")
Pattern TTT not found
Positions: [('ATT', 4), ('CT', 1)]
uj5u.com熱心網友回復:
我們可以在這里使用正則運算式方法。我們可以形成您想要找到的所有堿基對序列的交替。然后用于re.findall查找所有匹配項。然后可以使用集合算術獲得任何不匹配的模式。
text = "CTGATTCC"
patterns = ["ATT", "CT", "TTT"]
regex = r'(' r'|'.join(patterns) r')'
matches = re.findall(regex, text)
misses = set(patterns) - set(matches)
print(misses) # set(['TTT'])
uj5u.com熱心網友回復:
您可以執行以下操作:
text = "CTGATTCC"
pattern = "ATT", "CT", "TTT"
set = []
match = False
for x in pattern:
if match: match = False
for i in range(0, len(text)-len(x) 1):
if text[i:(i len(x))] == x:
set.append(i 1)
if not match: match = True
if not match:
print(f"Pattern not found: {x}")
set = set if len(set) > 0 else "None"
print("Positions: ", set)
這也會輸出
Positions: None
如果沒有附加任何內容。
uj5u.com熱心網友回復:
完成第二個回圈后,如果陣列“set”沒有遞增,則表示未找到“x”模式。
text = "CTGATTCC"
pattern = "ATT", "CT", "TTT"
set = []
for x in pattern:
sLen = len(set)
for i in range(0, len(text)-len(x) 1):
if text[i:(i len(x))] == x:
set.append(i 1)
if len(set) == sLen:
print("Not Found: ", x)
print("Positions:", set)
無論如何,您的代碼都有一些問題,因為如果模式大于文本,或者如果文本/模式為空(這也是未找到的情況)會發生什么
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/492569.html
上一篇:為什么splitlines()沒有給出Jupyter中三點的預期結果?
下一篇:如何計算列中的字串
