在python中访问条件迭代

在python中访问条件迭代,python,python-2.7,iterable,Python,Python 2.7,Iterable,我正在解析大量巨大的XML文件(高达1GB),并交叉引用一个给定字段大约700个可能匹配项的列表。如果我找到了匹配项,我想知道我从列表中找到了哪个匹配项,而不是使用字段本身的文本 我的代码中有以下行 如果有(在preCompiledRegexList中重新搜索(s,parsedOutTag.text)s): 我想知道当条件满足时如何直接访问iTrants。我目前有一个非常黑客的实现我需要发生的事情 我必须承认,而且我确信这是显而易见的,我采用这一行是为了提高这里关于堆栈溢出的另一个问题的效率

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

我的代码中有以下行


如果有(在preCompiledRegexList中重新搜索(s,parsedOutTag.text)s):

我想知道当条件满足时如何直接访问iTrant
s
。我目前有一个非常黑客的实现我需要发生的事情


我必须承认,而且我确信这是显而易见的,我采用这一行是为了提高这里关于堆栈溢出的另一个问题的效率,所以我并不真正了解所有细节。

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

for s in preCompiledRegexList:
    if re.search(s, parsedOutTag.text):
        # checking inner layer tags for additional content
        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
如果要处理
preCompiledRegexList
中匹配的所有项,请删除上面的
中断
,或者使用仅生成与所需条件匹配的值的生成器:

for s in preCompiledRegexList:
    if re.search(s, parsedOutTag.text):
        # checking inner layer tags for additional content
        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

(请注意,没有必要使用不同的
外部
内部
标签,我只是想强调它们存在于不同的作用域中。)

我不会因为将
for
循环放在
if any()
语句之外而损失任何计算效率。我相信你不会,否。如果您正在处理所有匹配的项,它可能比
any
调用花费的时间更长,但如上所述,这是因为
any
将停止处理第一个
True
的值。不,我没有处理Regex列表中的所有项。我只希望列表中有一个匹配项,如果有的话,我更希望没有匹配项。