【发布时间】:2014-06-11 17:07:56
【问题描述】:
我正在尝试使用 Counter() 和 most_common() 来计算两个列表中氨基酸的出现次数。让我们称它们为上和下:
counterup = Counter(upperseqs)
counterlow = Counter(lowerseqs)
countermc_up = (counterup.most_common(500))
countermc_low = (counterlow.most_common())
print len(countermc_up)
print len(countermc_low)
for k,v in countermc_up:
for x,y in countermc_low:
if x == k:
print >> fh1, k, '\t', v, '\t', y
elif x != k:
print >> fh1, k, '\t', v, '\t', "0.00"
else:
print "No Matches found!! Try again!"
所以我想要“上”列表中的前 500 个序列,并且我想将这些序列的计数(如果存在)与将包含在第二个“下”列表中的所有序列进行比较。第二个列表中有大约 36K 项计数。
当我运行代码时,没有 elif, else 语句,我得到了我想要的。第二个列表中包含的所有匹配项都以制表符分隔的格式打印到我之前打开的 fh 中:序列、上计数、下计数。
CARYLGYNSNWYPFDYW 589778 427779
CARDYRGYSGYNDAFNIW 294911 29343
CARKIGYSSGSEDYW 187806 90299
CARHLGYNNSWYPFDYW 82820 88700
CARHLGYNSAWYPFDYW 55642 45723
CARHLGYNDSWYPFDYW 44338 30974
CAKDFRGYTGYNDAFDIW 34638 9703
CARHLGYNSDWYPFDYW 23476 15692
CARHLGYNSVWYPFDYW 16223 12220
CARHLGYNSNWYPFDYW 15673 17198
......
CARYLNSWPY 89 0.00
但是,有一个在前 500 名列表中,但不在下级列表中,我需要找出是哪一个。我还将它用于其他不同大小的第二个列表,我知道在第一个列表中可以找到的项目更少。如果第二个列表中不存在该序列,我想要代码做的是在第三列中输入“0.00”。
当我使用 elif, else 语句运行它时发生了什么,我得到第一行完美:
例如: CARYLGYNSNWYPFDYW 589778 427779
但是,代码继续只使用第一个序列,直到遍历第二个列表中的所有项目。所以我得到:
CARYLGYNSNWYPFDYW 589778 0.00
CARYLGYNSNWYPFDYW 589778 0.00
CARYLGYNSNWYPFDYW 589778 0.00
CARYLGYNSNWYPFDYW 589778 0.00
CARYLGYNSNWYPFDYW 589778 0.00
CARYLGYNSNWYPFDYW 589778 0.00
为数千行。我已经筛选了这个文件,发现它确实打印了在第二个列表中找到该项目的下一个计数。由于它已经找到它的匹配项,我需要它继续到列表一中的下一个以在列表二中查找它,因为我知道该项目不会再次出现。我还需要保持 Counter() 创建的列表的排序顺序。
感谢所有帮助。
【问题讨论】: