Python - 仅在值为偶数时才创建元组

时间:2017-09-29 23:15:32

标签: python

我有一组工作代码,它遍历字符串并搜索2个相关的子字符串。 (请向用户@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)]

但是,我想更改代码,以便在值为偶数时仅将值返回给元组。 I.E.在上面我的例子中,值为" 19"不应该是有效的回报。

举个例子,让我们说这是我的新字符串:

xxStringAStringBStringB

我希望元组返回(2,16)。因为那些是下一个有效的"回报。

我的代码目前返回(2,9)但我想跳过" StringB"在索引9,因为它是一个奇数。

思考?谢谢!!

1 个答案:

答案 0 :(得分:1)

>>> 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. 的第一个条件(偶数位置)上进行救助
  3. 为此,我们使用next()调用来避免迭代。请阅读here了解更多信息。
  4. 现在,如果我们找不到sub_B,我们希望迭代在这种情况下返回默认值,我们选择None