Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用函数查找字符串中k长度的重复子字符串_Python_Python 3.x_String_Substring - Fatal编程技术网

Python 使用函数查找字符串中k长度的重复子字符串

Python 使用函数查找字符串中k长度的重复子字符串,python,python-3.x,string,substring,Python,Python 3.x,String,Substring,我刚开始使用这个函数,我正在尝试构建一个,找到一个重复的子字符串,长度至少为k,并将结果返回到包含dict的tuple中。 键需要是子字符串,值是重复的次数,然后将子字符串的长度添加到元组中 我刚刚开始,但我真的不知道如何继续,但这就是我试图做的: def longest_repeat(string, K) longest = {} , if isinstance(K, int) and isinstance(string, str) for sub_str in

我刚开始使用这个函数,我正在尝试构建一个,找到一个重复的子字符串,长度至少为k,并将结果返回到包含dict的tuple中。 键需要是子字符串,值是重复的次数,然后将子字符串的长度添加到元组中

我刚刚开始,但我真的不知道如何继续,但这就是我试图做的:

def longest_repeat(string, K)
    longest = {} , 
    if isinstance(K, int) and isinstance(string, str)
       for sub_str in string:
          if sub_str >= K:
             longest[0][sub_seq] = DNA_seq_slic = []
a=0
b=k
for nuc in range(len(DNA_seq)-k+1):
    DNA_seq_slic.append(DNA_seq[a:b]) 
    a +=1
    b +=1  
    
import collections
for sub_seq in DNA_seq_slic:
    repeated = [item for item, count in collections.Counter(DNA_seq_slic).items() if count > 1]
repeated_subseq_dict = dict(zip(repeated,[0 for x in range(0,len(repeated))]))
for key in repeated_subseq_dict:
    repeated_subseq_dict[key] = DNA_seq_slic.count(key)
return(repeated_subseq_dict)
我很抱歉,如果它有点混乱,我没有真正的方向,我试图使用我建立的其他功能来解决这个问题,但它并没有真正起作用。如果需要,我可以进一步澄清。 输出应如下所示:

longest_repeated("ATAATACATAATA", 5)
 output: longest = {ATAATA: 2} , 6

非常感谢您的帮助!谢谢

您可以尝试
re
模块:

import re


def longest_repeated(s, k):
    m = re.findall(f"(.{{{k},}})(?=.*\\1)", s)
    if m:
        mx = max(m, key=len)
        return {mx: s.count(mx)}, len(mx)

一些测试:

print(longest_repeated("ATAATACATAATA", 5))
({'ATAATA': 2}, 6)

print(longest_repeated("XXXXXATAATACATAATAXXXXX", 5))
({'ATAATA': 2}, 6)

你能编辑你的问题并把样本(小)输入和预期输出放在那里吗?longest_repeated(“atacatata”,5)output:longest={ataatata:2},6感谢你指定正则表达式(regex)就是为了这个目的而来的:谢谢,但我真的不知道如何使用re模块,但它工作得很好。你能解释一下吗-m=re.findall(f“({{{{{k},}})(?=.*\\1)”,s)并没有真正理解它的意思