我有两个序列S和R. 我想在S中寻找区别于R的子串。这意味着在R中找不到子串。我想对R做同样的事。我想在R中找到不在S中的子串。
Example:
S='acctac'
R='gtgact'
Desired output:
SR=[cc,ta]
RS=[gt,tg,ga,act]
其中SR是S hat中的区分子串的集合不在R中 和RS是R中不在S
中的子串注意:如果子字符串中包含另一个也正在分散的子字符串,则子字符串无法区分。
有什么建议吗?在python中 应该构建程序,以便可以对不同长度的序列进行编程。
答案 0 :(得分:0)
我终于来了!弄清楚了。以下工作:(虽然我承认可能对于更长的序列来说有点慢。请试一试并告诉我们)
S='acctac'
R='gtgact'
lst = [S[subs:subs+i] for i in range(2, len(S)) for subs in range(len(S)-i+1) if S[subs:subs+i] not in R]
lst2 = [R[subs:subs+i] for i in range(2, len(R)) for subs in range(len(R)-i+1) if R[subs:subs+i] not in S]
lst = list(set([item for item in lst if all(j not in item for j in lst if j!=item)]))
lst2 = list(set([item for item in lst2 if all(j not in item for j in lst2 if j!=item)]))
>>> print lst
['cc', 'ta']
>>> print lst2
['gt', 'tg', 'ga', 'act']
答案 1 :(得分:0)
嗯,这是一个使用相同长度的子串的简单方法。
def substr_of_len(n, s):
return [s[x:x + n] for x in range(0, len(s) - n + 1)]
print [x for x in substr_of_len(2, 'gtgact') if x not in substr_of_len(2, 'acctac')]
>>> ['gt', 'tg', 'ga']
print [x for x in substr_of_len(2, 'acctac') if x not in substr_of_len(2, 'gtgact')]
>>> ['cc', 'ta']
print [x for x in substr_of_len(3, 'gtgact') if x not in substr_of_len(3, 'acctac')]
>>> ['gtg', 'tga', 'gac', 'act']
print [x for x in substr_of_len(3, 'acctac') if x not in substr_of_len(3, 'gtgact')]
>>> ['acc', 'cct', 'cta', 'tac']