2014-01-28 91 views
0

我有兩個數字清單:如何找到兩個列表中的匹配值?

parasite genome [1,1,1,0,1,0,1,0,1,1] 
host genome  [1,1,0,0,1]) 

我試圖找到感染機會得到由寄生蟲傳送到主機。傳播與寄生蟲和宿主基因組中1的匹配成正比。在這個例子中它是3/10:

  • 3因爲1的位置匹配3個地方;和
  • 10是寄生蟲基因組的長度。

我寫下了程序的一部分,但是我被困在如何計算1的匹配數。有人可以幫我嗎?

host_genome_length = 10 
parasite_genome_length = 5 
maximum_infection_rate=1.0 

def infection rate(host_genome, parasite_genome): 
    if host_genome_length > parasite_genome_length: 
     return maximum_infection_rate *number of matches'of 1?(confused here)/float (host_genome_length) 
    else: 
     return maximum_infection_rate * number of matches'of 1?(confused here)/float (parasite_genome_length)  

print infection_rate([1,1,1,0,1,0,1,0,1,1], [1,1,0,1,1]) 
+1

你的問題需要一個更好,更描述性標題。它也可以使用一些語法清理。 –

+2

你是否只關心從一開始或模式匹配的任何地方匹配的次數? – Joel

回答

4

您可以zip基因組和主機,檢查在相同位置的元素:

>>> genome = [1,1,1,0,1,0,1,0,1,1] 
>>> host = [1,1,0,0,1] 

>>> print sum(1 for g, h in zip(genome, host) if g and h) 
3 
>>> # or 
>>> print sum(g * h for g, h in zip(genome, host)) 
3