我正在运行一个循环来附加我的列表中的句子(命名为: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"]
答案 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)")