在 python 中访问条件迭代

accessing a conditional iterate in python

我正在解析大量巨大的 XML 文件(最多 1GB),并且我正在交叉引用给定字段的大约 700 个可能匹配项的列表。如果我找到一个匹配项,我想知道我从我的列表中找到了哪个匹配项,而不是使用字段本身的文本。

我的代码中有以下行

<-- outside loops iterating over outer layer tags tags --> if any(re.search(s, parsedOutTag.text) for s in preCompiledRegexList): <-- checking innner layer tags for additional content-->

我想知道如何在条件满足时直接访问迭代器s。我目前对我需要发生的事情有一个非常 hack'ish 的实现。

我不得不承认,我确信这很明显,我采用这条线是为了提高 Stack Overflow 上另一个问题的效率,所以我真的不知道所有细节。

any 函数短路,我相信,所以即使您可以从生成器表达式访问 s 绑定,它也只会是第一个匹配的实例。如果那是你想要的,那么你可以打开 if 条件:

for s in preCompiledRegexList:
    if re.search(s, parsedOutTag.text):
        # checking inner layer tags for additional content
        break

如果您想处理 preCompiledRegexList 中所有匹配的项,请删除上面的 break,或者使用仅生成与所需条件匹配的值的生成器:

for outer_s in (inner_s for inner_s in preCompiledRegexList of re.search(s, parsedOutTag.text):
    # checking inner layer tags for additional content

(请注意,没有必要使用不同的 outer_sinner_s 标签,我只是想强调它们存在于不同的范围内。)