如何在两个列表中找到匹配的值?

时间:2014-01-28 21:44:59

标签: python python-2.7

我有两个数字列表:

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 个答案:

答案 0 :(得分: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