在Python中,如何在较长的字符串中提取穿过某个索引的所有子字符串?

2024-04-19 04:32:39 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个字符串(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)

Tags: 字符串代码in示例forlen定义字母
1条回答
网友
1楼 · 发布于 2024-04-19 04:32:39

简单回答

您可以通过检查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}

相关问题 更多 >