说我有一个字符串(mystring)。我想提取mystring的所有可能的子串,只要子串长度为8-15。我已经能够做到这一点没有问题(见下面的代码)。但是,如果我只想提取这些子串,如果它们与mystring的某个部分重叠,该怎么办?重叠是由mystring中的位置而不是mystring的某个字母定义的,因为字母在mystring中不是唯一的。
在下面的示例中,我可能希望我的子字符串包含从零开始的索引11。
mystring = "JACKANDJILLRANUPTHEHILLFORWATER"
substrings = set()
for i in range(0, len(mystring)):
for length in range(8,16):
ss = mystring[i:i+length]
if len(ss) == length:
substrings.add(ss)
答案 0 :(得分:1)
您可以通过选中11
来检查[i, i + length)
中是否包含i <= 11 < i + length
:
mystring = "JACKANDJILLRANUPTHEHILLFORWATER"
substrings = set()
for i in range(0, len(mystring)):
for length in range(8,16):
ss = mystring[i:i+length]
if len(ss) == length and i <= 11 < i + length:
substrings.add(ss)
你可以这样做:
substrings = {mystring[i:j]
for i in range(0, len(mystring))
for j in range(i + 8, min(i + 16, len(mystring)))
if i <= 11 < j}