在 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_s
和 inner_s
标签,我只是想强调它们存在于不同的范围内。)
我正在解析大量巨大的 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_s
和 inner_s
标签,我只是想强调它们存在于不同的范围内。)