【问题标题】:Prevent Duplication within loop防止循环内重复
【发布时间】:2017-02-05 11:11:13
【问题描述】:

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

如果我的句子中有任何标签(给定的 3 个标签),有没有办法附加该句子?目前,由于标签中的这个“for”循环(参见“当前输出”),我得到每个输出 3 次(参见“当前输出”),即总共 4*3=12 个输出而不是 4 个。 如果您看到我的“必需输出”,前 3 个句子在那里,因为它们包含一个或所有标签,最后一个显示为“未找到”,因为它不包含任何标签。

我的代码:

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

【问题讨论】:

  • 您需要的输出与您初始化的sentence 列表相同,除了'hi' 替换为'Not required'。是吗?
  • 是的,没错,因为它不包含任何上述标签。

标签: python arrays string list text


【解决方案1】:

您的代码可以通过使用 list comprehensionany() 来简化:

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

【讨论】:

    【解决方案2】:

    如果我正确理解您的问题,您只需要从内部循环中得到一个答案:是否有任何标签匹配。您当前的代码正在检查每个句子中的每个标签,并为每个标签分别回答(this 标签是否匹配)。

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

    【讨论】:

      猜你喜欢
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2021-09-18
      • 2021-04-22
      • 1970-01-01
      相关资源
      最近更新 更多