Python只在值为偶数时创建元组

2024-09-29 20:26:06 发布

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

我有一个工作代码集,它遍历一个字符串并搜索2个相关的子字符串。(大声向user@bulbus求助!)你知道吗

该代码返回一个元组列表,其中包含每个子字符串的下一个实例的位置的索引位置。你知道吗

例如,如果字符串和子字符串如下所示:

sub_A = "StringA"
sub_B = "StringB"

s = "abcdefStringAghijklStringB"

然后代码返回元组(6,19),因为这是两个字符串存在的下一个索引位置。你知道吗

代码的相关部分如下所示:

[(m.start(),re.compile(sub_b).search(s,m.start()).start()) for m in re.finditer(sub_A,s)]

但是,我想更改代码,使其仅在值为偶数时才向元组返回值。也就是说,在我上面的例子中,值“19”不应该是有效的返回值。你知道吗

例如,假设这是我的新字符串:

xxStringAStringBStringB

我希望元组返回(2,16)。因为这些是下一个“有效”的回报。你知道吗

我的代码当前返回(2,9),但我想跳过索引9处的“StringB”,因为它是一个奇数。你知道吗

有什么想法?谢谢!!你知道吗


Tags: 实例字符串代码re列表searchstart元组
1条回答
网友
1楼 · 发布于 2024-09-29 20:26:06
>>> s = "abcdefStringAghijklStringB"                                                                
>>> [(m.start(),next((x.start() for x in re.compile(sub_B).finditer(s,m.start()) if x.start()%2==0),None)) for m in re.finditer(sub_A,s)]
[(6, None)]
>>> s='xxStringAStringBStringB'                                                                     
>>> [(m.start(),next((x.start() for x in re.compile(sub_B).finditer(s,m.start()) if x.start()%2==0),None)) for m in re.finditer(sub_A,s)]
[(2, 16)]
  1. 我们使用finditer来查找sub_B之后的所有sub_A,但是我们需要在满足以下条件的第一个条件(偶数位置)上进行救助
  2. 为此,我们使用next()调用退出迭代。阅读here了解更多信息。你知道吗
  3. 现在,如果我们没有找到sub_B,我们希望迭代返回一个默认值,在本例中,我们选择了None

相关问题 更多 >

    热门问题