for 循环中的 Counter() 函数看起来很奇怪
Counter() function in for loop looks odd
我有一个要在测序数据中找到的序列列表。所以我 运行 一个 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)
我不确定您是否非常了解您的代码,而且您对 Counter
的使用并不是我认为的真正用途。
首先检查文本文件每一行的子字符串是否在序列 (line
) 中,如果是,则将其添加到列表中 ls2
然后,对于该列表的每个元素(即文本文件中的整个 lines/sequences),您将 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)
我有一个要在测序数据中找到的序列列表。所以我 运行 一个 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)
我不确定您是否非常了解您的代码,而且您对 Counter
的使用并不是我认为的真正用途。
首先检查文本文件每一行的子字符串是否在序列 (line
) 中,如果是,则将其添加到列表中 ls2
然后,对于该列表的每个元素(即文本文件中的整个 lines/sequences),您将 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)