尝试使用python以10的连续间隔查找字符串的特定字符

尝试使用python以10的连续间隔查找字符串的特定字符,python,python-3.x,string,Python,Python 3.x,String,我有一个由DNA组成的数据,存储为字母“a”、“g”、“c”和“t”的序列。在我的数据中,我使用了: count = data.count('t') print(count) 在Python中,查找“t”出现1514710次 我想知道“t”在10个字母的连续窗口中出现的次数,如下所示: 从图中,我可以看出“t”在第一组10个字母中出现3次(即在第一组10个字母中,“t”在10个字母中出现3次),而“t”在第二组10个字母中出现2次 我希望显示每个窗口的数字,而不在python脚本中的每个数字后

我有一个由DNA组成的数据,存储为字母“a”、“g”、“c”和“t”的序列。在我的数据中,我使用了:

count = data.count('t')
print(count)
在Python中,查找“t”出现1514710次

我想知道“t”在10个字母的连续窗口中出现的次数,如下所示:

从图中,我可以看出“t”在第一组10个字母中出现3次(即在第一组10个字母中,“t”在10个字母中出现3次),而“t”在第二组10个字母中出现2次

我希望显示每个窗口的数字,而不在python脚本中的每个数字后面加换行符

例如,如果我的数据如下所示:

    atgcttgcatgcttgcaaatgcatgcttgcattgcaa
我非常希望Python输出显示如下内容:

    't' appears twice in the first set of 10 letters, 
    and appears 4 times in the second set of 10 letters,
    and so on....
这就是我迄今为止所尝试的:

    window_size = 10                                                                          
    windows_length = len(data) // window_size                                                
    windows = [data[i:i+windows_length] for i in range(0, len(data),                       windows_length)]        
    result = sum(1 if 't' in (x) else 0 for x in windows)  
显示11个

但我不确定这是否正确。
任何帮助都将不胜感激。多谢各位

您可以使用列表理解功能将数据分解为“窗口”列表:

windows: List[List[str]] = [data[i * 10:(i + 1) * 10] 
                            for i in range((len(data) + 10 - 1) // 10 )]
然后以相同的方式获得每个窗口的计数:

counts: List[int] = [window.count('t') 
                     for window in windows]

您没有指定打印输出的确切方式,因此我将把其余部分留给您来确定,但请尝试
打印(计数)
以查看该格式是否适合您。

您可以使用列表理解将数据分解为“窗口”列表:

windows: List[List[str]] = [data[i * 10:(i + 1) * 10] 
                            for i in range((len(data) + 10 - 1) // 10 )]
然后以相同的方式获得每个窗口的计数:

counts: List[int] = [window.count('t') 
                     for window in windows]

您没有指定要打印输出的确切方式,因此我将剩下的留给您确定,但请尝试
打印(计数)
以查看该格式是否适合您。

如果我理解正确,并且您想计算有多少窗口包含
't'
。然后,我的方法是将
数据
拆分为
窗口
,并计算其中有多少包含
't'

窗口大小=10
窗口长度=len(数据)//窗口大小
windows=[i范围内i的数据[i:i+windows_长度](0,len(数据),windows_长度)]
结果=总和(如果(x)中的“t”为1,则windows中的x为0)

如果我没听错,你想数一数有多少窗口包含
't'
。然后,我的方法是将
数据
拆分为
窗口
,并计算其中有多少包含
't'

窗口大小=10
窗口长度=len(数据)//窗口大小
windows=[i范围内i的数据[i:i+windows_长度](0,len(数据),windows_长度)]
结果=总和(如果(x)中的“t”为1,则windows中的x为0)

如果dna序列是一个字符串,那么就有textwrap.wrap,它返回已包装行的列表(尽管可能存在内存问题)。所以我们可以写:

>>> from textwrap import wrap
>>> dna = 'atgcttgcatgcttgcaaatgcatgcttgcattgcaa'
>>> [chunk.count('t') for chunk in wrap(dna, 10)]
[4, 3, 3, 2]                                         
要获取区块编号,可以使用枚举:

>>> print(*(f'On row #{i} "t" occured {chunk.count("t")} times' for i, chunk in enumerate(wrap(dna, 10), start=1)), sep='\n')
On row #1 "t" occured 4 times
On row #2 "t" occured 3 times
On row #3 "t" occured 3 times
On row #4 "t" occured 2 times

如果dna序列是一个字符串,那么就有textwrap.wrap,它返回已包装行的列表(尽管可能有内存方面的考虑)。所以我们可以写:

>>> from textwrap import wrap
>>> dna = 'atgcttgcatgcttgcaaatgcatgcttgcattgcaa'
>>> [chunk.count('t') for chunk in wrap(dna, 10)]
[4, 3, 3, 2]                                         
要获取区块编号,可以使用枚举:

>>> print(*(f'On row #{i} "t" occured {chunk.count("t")} times' for i, chunk in enumerate(wrap(dna, 10), start=1)), sep='\n')
On row #1 "t" occured 4 times
On row #2 "t" occured 3 times
On row #3 "t" occured 3 times
On row #4 "t" occured 2 times

这个问题需要更加明确。您可以添加您迄今为止尝试过的内容,以及您的“数据”格式是什么?是txt还是其他格式?我同意-我认为有关您的数据格式和所需输出的可视示例的信息将帮助我们帮助您:)问题需要更清楚。您可以添加您迄今为止尝试过的内容,以及您的“数据”格式是什么?是txt还是其他格式?我同意-我认为有关您的数据格式和所需输出的可视示例的信息将帮助我们帮助您:)