在python中访问条件迭代

2024-04-24 22:41:39 发布

您现在位置: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-->

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

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


Tags: 文件代码文本layer列表foriftags
1条回答
网友
1楼 · 发布于 2024-04-24 22:41:39

我相信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标签,我只想强调它们存在于不同的作用域中。)

相关问题 更多 >