我要從一組序列(字串)中生成乙個子集字典,其中每個序列都代表乙個鍵,並且值應該是在「匹配」(例如1)位置最多匹配的所有序列,都與原始序列(鍵),以及當時子集中的所有值條目。
例如,考慮由「 a」,「 c」,「 g」和「 t」組成的所有長度為3的序列,其中乙個鍵值對應該是(或可以是,因為有更多可能的方法來選擇一套)。
這是我想出的定義:
def pick(seq,superset):
subset = [seq]
for seq in subset:
count = 0
for item in superset:
if len([i for i, j in zip(list(seq),list(item)) if i==j])==match:
count += 1
if len(subset)==count:
subset += [''.join(item)]
return subset
我得到的是:
我想要的是:
我遇到的問題是,我現在僅生成乙個子集,其中值與鍵的匹配不超過乙個位置,但是值序列的確與該子集中的其他值具有多個特定匹配的位置。有人對此問題有解決方案嗎?
解決方案
我將您的問題解釋為:「我想獲取所有專案的列表,這些專案的字元superset之間在0到之間,並且具有match匹配的字元seq。但是現在,我的函式返回了所有具有完全 match匹配的字元的專案的列表。也是返回的列表等於seq,我不希望這樣。」
def pick(seq,superset,match):
subset =
for item in superset:
if len([i for i, j in zip(list(seq),list(item)) if i==j])<=match:
return subset
superset = [
'ggg', 'ggc', 'gga', 'ggt', 'gcg', 'gcc', 'gca', 'gct', 'gag', 'gac', 'gaa', 'gat', 'gtg', 'gtc', 'gta', 'gtt',
'cgg', 'cgc', 'cga', 'cgt', 'ccg', 'ccc', 'cca', 'cct', 'cag', 'cac', 'caa', 'cat', 'ctg', 'ctc', 'cta', 'ctt',
'agg', 'agc', 'aga', 'agt', 'acg', 'acc', 'aca', 'act', 'aag', 'aac', 'aaa', 'aat', 'atg', 'atc', 'ata', 'att',
'tgg', 'tgc', 'tga', 'tgt', 'tcg', 'tcc', 'tca', 'tct', 'tag', 'tac', 'taa', 'tat', 'ttg', 'ttc', 'tta', 'ttt'
seq = "aaa"
print pick(seq, superset, 1)
結果(為清楚起見,我新增了換行符):
['ggg', 'ggc', 'gga', 'ggt', 'gcg', 'gcc', 'gca', 'gct', 'gag', 'gac', 'gat', 'gtg', 'gtc', 'gta', 'gtt',
'cgg', 'cgc', 'cga', 'cgt', 'ccg', 'ccc', 'cca', 'cct', 'cag', 'cac', 'cat', 'ctg', 'ctc', 'cta', 'ctt',
'agg', 'agc', 'agt', 'acg', 'acc', 'act', 'atg', 'atc', 'att',
'tgg', 'tgc', 'tga', 'tgt', 'tcg', 'tcc', 'tca', 'tct', 'tag', 'tac', 'tat', 'ttg', 'ttc', 'tta', 'ttt']
def similarity(a,b):
return sum(1 for p,q in zip(a,b) if p==q)
def pick(seq, superset, match):
subset =
for item in superset:
if similarity(item, seq) <= match and all(similarity(item, x) <= match for x in subset):
return subset
superset = [
'ggg', 'ggc', 'gga', 'ggt', 'gcg', 'gcc', 'gca', 'gct', 'gag', 'gac', 'gaa', 'gat', 'gtg', 'gtc', 'gta', 'gtt',
'cgg', 'cgc', 'cga', 'cgt', 'ccg', 'ccc', 'cca', 'cct', 'cag', 'cac', 'caa', 'cat', 'ctg', 'ctc', 'cta', 'ctt',
'agg', 'agc', 'aga', 'agt', 'acg', 'acc', 'aca', 'act', 'aag', 'aac', 'aaa', 'aat', 'atg', 'atc', 'ata', 'att',
'tgg', 'tgc', 'tga', 'tgt', 'tcg', 'tcc', 'tca', 'tct', 'tag', 'tac', 'taa', 'tat', 'ttg', 'ttc', 'tta', 'ttt'
seq = "aaa"
print pick(seq, superset, 1)
結果:['ggg', 'gcc', 'gat', 'gta', 'cgc', 'ccg', 'ctt', 'agt', 'atg', 'tga', 'tct', 'tag', 'ttc']
python是高階動態程式語言 Python語言
python是一門跨平台 開源 免費的解釋型高階動態程式語言。python支援命令式程式設計 how to do 函式式程式設計 what to do 完全支援物件導向程式設計,擁有大量擴充套件庫。膠水語言 可以把多種不同語言編寫的程式融合到一起實現無縫拼接,更好地發揮不同語言和工具的優勢,滿足不同...
Python學習筆記 1 1 2 認識Python
一.課程目標 二.詳情解讀 1.初識pythonpython語言是一種高階程式語言,它於1991年由吉多.範羅蘇姆 guido van rossum 發明。目前主要應用於web開發 gui開發 網路爬蟲 資料科學 人工智慧等領域。python官方 python語言也是一種多正規化程式語言,即物件導向...
python實現演算法 kmp演算法python實現
kmp演算法python實現 kmp演算法 kmp演算法用於字串的模式匹配,也就是找到模式字串在目標字串的第一次出現的位置 比如abababc 那麼bab在其位置1處,bc在其位置5處 我們首先想到的最簡單的辦法就是蠻力的乙個字元乙個字元的匹配,但那樣的時間複雜度會是o m n kmp演算法保證了時...