for循环中的Counter()函数看起来很奇怪

我有一个序列列表,可在测序数据中找到。因此,我运行了一个for循环以查找数据集中的匹配序列,并使用Counter()获得最大序列。但是我发现Counter()函数会添加以前的循环数据,而不是单独的循环数据。

ls = ['AGC','GCT','TAC','CGT']

dataset.txt就像一串序列的“ AGTAGCTTT”,“ AGTTAGC” ......

def xfind(seq):
    ls2 = []
    with open(dataset.txt,'r') as f:
    for line in f:
        if seq in line:
            ls2.append(line)

    import collections
    from collections import Counter
    cnt = Counter()
    for l in ls2:
        cnt[l] += 1
    print (cnt.most_common()[0])

for l2 in ls:
    xfind(l2)

结果如下: (“ AGTAGCTTT”,2) (“ AGTAGCTTT”,5)

应为: (“ AGTAGCTTT”,2) (“ GCT ...”,3)

lulujiaojiao 回答:for循环中的Counter()函数看起来很奇怪

我不确定您是否非常了解您的代码,并且我认为您对Counter的使用并不是真正的预期用途。

首先要检查文本文件每一行的子串是否在顺序(line)中,如果是,则将其添加到列表ls2

然后为该列表的每个元素(即文本文件中的全部行/序列)向该键的计数器添加1。当Counter的全部要点是您可以简单地调用时,您可以循环执行此操作:

cnt = Counter(ls2)

这一切都意味着您正在报告文件中最常见的序列,其中也包含给定的子序列。

现在,实际上很难说出确切的输出是什么,而不知道您的dataset.txt是什么样子。

我将首先整理一下代码:

from collections import Counter

subsequences = ['AGC','GCT','TAC','CGT']

def xfind(subseq):
    contains_ss = []
    with open("dataset.txt",'r') as f:
       for line in f:
           if subseq in line:
               contains_ss.append(line)
    cnt = Counter(contains_ss)
    print(cnt.most_common()[0])

for ss in subsequences:
    xfind(ss)
本文链接:https://www.f2er.com/3082410.html

大家都在问