防止循环内重复

2024-06-16 10:20:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在运行一个循环,以便在我的列表(名为:text)中附加包含任何(或所有给定标记)的句子,但是问题是,我得到了重复的输出,因为循环在所有标记上逐个运行以进行标识。你知道吗

有没有一种方法,如果在我的句子中有任何标记(3个给定的),句子就会被追加?目前,我得到每个输出3次,因为这个'for'循环中的标签(见“电流输出”),即共4*3=12输出,而不是4。 如果您看到我的“Required Output”,前3个句子就在那里,因为它们包含了其中一个或所有的标记,最后一个显示为“Not found”,因为它不包含任何标记。你知道吗

我的代码:

text=[]    
tags=["_NN","_VB","_PRP"]

sentences =['Thanks_NNS sir_VBP','Oh_UH thanks_NNS to_TO remember_VB','Welcome_VB my_UH child_UH',"hi"]


for sentence in sentences:
    for tag in tags:
        if tag in sentence:
            z = sentence.split(",")
            k = " ".join(z)            
            text.append(k)

        else:
            text.append("Not found")

电流输出:

['Thanks_NNS sir_VBP',
 'Thanks_NNS sir_VBP',
 'Not found',
 'Oh_UH thanks_NNS to_TO remember_VB',
 'Oh_UH thanks_NNS to_TO remember_VB',
 'Not found',
 'Not found',
 'Welcome_VB my_UH child_UH',
 'Not found',
 'Not found',
 'Not found',
 'Not found']

所需输出:

['Thanks_NNS sir_VBP',
'Oh_UH thanks_NNS to_TO remember_VB',
'Welcome_VB my_UH child_UH',
"Not found"]

Tags: totext标记not句子ohvbsir
2条回答

您的代码可以通过使用列表理解^{}简化为:

>>> sentences =['Thanks_NNS sir_VBP','Oh_UH thanks_NNS to_TO remember_VB','Welcome_VB my_UH child_UH',"hi"]
>>> tags=["_NN","_VB","_PRP"]
>>> replace_with = "Not found"

>>> [s if any(t in s for t in tags) else replace_with for s in sentences]
['Thanks_NNS sir_VBP', 'Oh_UH thanks_NNS to_TO remember_VB', 'Welcome_VB my_UH child_UH', 'Not found']

如果我正确理解了您的问题,那么您只需要从内部循环中得到一个答案:是否有任何标记匹配。您当前的代码检查每个句子中的每个标记,并分别回答每个标记(doesthistag match)。你知道吗

通过在生成器表达式上使用内置函数any,可以获得所需的内容:

for sentence in sentences:
    if any(tag in sentence for tag in tags):
        z = sentence.split(",")
        k = " ".join(z)            
        text.append(k)
    else:
        text.append("Not found")

相关问题 更多 >