防止循环内重复

时间:2017-02-05 11:11:13

标签: python arrays string list text

我正在运行一个循环来附加我的列表中的句子(命名为:text),其中包含任何(或所有给定的标签),但问题是我得到重复的输出,因为循环在所有标签上运行一个一个用于识别。

有没有一种方式,如果我的句子中有任何标签(给出3个),句子会被追加?目前我正在获得每次输出3次因为这个'对于'标签中的循环(参见"电流输出")即总共4 * 3 = 12个输出而不是4个。 如果您看到我的"必需输出",前三个句子就在那里,因为它们包含一个或所有标签,最后一个显示为"未找到"因为它不包含任何标签。

我的代码:

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"]

2 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,您只需要内循环中的一个答案:任何标记都匹配。您当前的代码正在检查每个句子中的每个标记,并为每个标记单独回答(标记匹配)。

您可以在生成器表达式上使用内置函数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")

答案 1 :(得分:1)

使用列表理解any()可以简化您的代码:

df.filter("cast(dt_column as date) >= cast('2017-02-03' as date)")