在 Python 中,如何提取较长字符串中与某个索引交叉的所有子字符串?
In Python how do I extract all substrings that cross a certain index in a longer string?
假设我有一个字符串 (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)
简单回答
您可以通过检查 i <= 11 < i + length
:
来检查 11
是否包含在 [i, 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}
假设我有一个字符串 (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)
简单回答
您可以通过检查 i <= 11 < i + length
:
11
是否包含在 [i, 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}