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