Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.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:将所有列表项与字符串的子字符串进行比较_Python_String_List - Fatal编程技术网

Python:将所有列表项与字符串的子字符串进行比较

Python:将所有列表项与字符串的子字符串进行比较,python,string,list,Python,String,List,应将列表中的所有项与字符串的每50长子字符串进行比较。我写的代码使用较小的字符串长度,但如果字符串非常大(例如:8800),则不是。有人能提出更好的方法或调试代码吗 代码: a_str='CGGACTCGACAGAGATGTGAAGAGAGACAGATGTGAAGCTCGACACAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGA' a=0 b=5 c=50 长度=长度(a_str) 长度b=长度-b+

应将列表中的所有项与字符串的每50长子字符串进行比较。我写的代码使用较小的字符串长度,但如果字符串非常大(例如:8800),则不是。有人能提出更好的方法或调试代码吗

代码:

a_str='CGGACTCGACAGAGATGTGAAGAGAGACAGATGTGAAGCTCGACACAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGA'
a=0
b=5
c=50
长度=长度(a_str)
长度b=长度-b+1
列表1=[]
列表2=[]
列表3=[]
列表4=[]
因为我在一个街区[a:lengb]:
findstr=a_str[a:b]
如果findstr不在列表2中:
计数=一个单位计数(findstr)
list1=[m.start()表示re.finditer(findstr,a_str)中的m]
last=list1[-1]
first=list1[0]
差异=最后一个-第一个
如果差异>45:
计数=计数-1
如果计数>3:
列表2.append(findstr)
list3.append(list1)
a+=1
b+=1
a=0
dictionary=dict(zip(列表2,列表3))
对于清单2中的j:
对于a_str[a:c]中的k:
如果c
对于长度为8800、b=10、count1=17和c=588的字符串,在循环过程中,c仅在1161之前取值


我需要长度为5的子字符串在50个窗口长度内重复4次(即,主字符串每50个字符)

我使用理解和集合创建了一个更容易理解的函数

def find_four_substrings(a_str, sub_len=5, window=50, occurs=4):
    '''
    Given a string of any length return the set of substrings
    of sub_length (default is 5) that exists exactly occurs 
    (default 4) times in the string, for a window (default 50)
    '''
    return set(a_str[i:i+sub_len] for i in range(len(a_str) - sub_len) 
                if a_str.count(a_str[i:i+sub_len], i, window) == occurs)

返回

set(['CGACA'])

这将查找长度为5的所有子字符串,这些子字符串在50个字符内至少重复4次或更多次(不重叠)。结果列表没有重复项

a_str = 'CGGACTCGACAGATGTGAAGAACGACAATGTGAAGACTCGACACGACAGAGTGAAGAGAAGAGGAAACATTGTAA'
b = 5      #length of substring
c = 50     #length of window
repeat = 4 #minimum number of repetitions

substrings = list({
    a_str[i:i+b]
    for i in range(len(a_str) - b)
    if a_str.count(a_str[i:i+b], i+b, i+c) >= repeat - 1
})
print(substrings)
我相信这就是你想要的。如果不是,请告诉我

['CGACA', 'GAAGA']

它在整个字符串中提供4个重复的子字符串..但是我需要在整个字符串的50个窗口长度中提供4个重复的子字符串
a_str = 'CGGACTCGACAGATGTGAAGAACGACAATGTGAAGACTCGACACGACAGAGTGAAGAGAAGAGGAAACATTGTAA'
b = 5      #length of substring
c = 50     #length of window
repeat = 4 #minimum number of repetitions

substrings = list({
    a_str[i:i+b]
    for i in range(len(a_str) - b)
    if a_str.count(a_str[i:i+b], i+b, i+c) >= repeat - 1
})
print(substrings)
['CGACA', 'GAAGA']