<pre><code>def findGenes(seq1, seq2, llist):
from collections import OrderedDict
from collections import Counter
from itertools import product
od = OrderedDict()
for b,a in llist:
od.setdefault(a,[]).append(b)
llv = []
for k,v in od.items():
if seq1 == k or seq2 == k:
llv.append(v)
# flat list needed for counting genes frequencies
flatL = [ x for sublist in llv for x in sublist]
cFlatl = Counter(flatL)
# this will gather genes that like gene6 have both sequencies
l_lonely = []
for k in cFlatl:
if cFlatl[k] > 1:
l_lonely.append(k)
newL = []
temp = []
for sublist in llv:
for el in sublist:
if el not in l_lonely:
newL.append(el)
temp.append(newL)
newL = []
# temp contains only genes that do not belong to both sequences
# product will connect genes from different sequence groups
p = product(*temp)
for el in list(p):
print(el)
print(l_lonely)
</code></pre>
<p><strong>输出:</strong></p>
<p>lt=[('gene1','COG1'),('gene1','COG1003'),('gene2','COG2'),('gene3','COG273'),('gene4','COG1'),
('gene5','COG273'),('gene5','COG71'),('gene6','COG1'),('gene6','COG273')]</p>
<p><strong>findGenes('COG1','COG273',lt)</strong></p>
<p>('gene1','gene3')</p>
<p>('gene1','gene5')</p>
<p>('gene4','gene3')</p>
<p>('gene4','gene5')</p>
<p>['gene6']</p>