【问题标题】:selecting strings containing at least one string as substring选择包含至少一个字符串的字符串作为子字符串
【发布时间】:2019-08-07 21:32:41
【问题描述】:

我有一个术语列表:

terms = [
     'mani factor',
     'manner',
     'manufactur',
     'manufactur distribut',
     'manufactur facil',
     'manufactur oper',
     'manufactur process',
     'march',
     'margin',
     'market advers',
     'market condit',
     'market disrupt',
     'market price',
     'market product',
     'market result',
     'market risk',
     'market sale',
     'market share',
     'market valu',
     'materi advers',
     'materi advers affect',
     'materi advers effect',
     'materi advers impact',
     'materi affect',
     'materi impact'
]

还有一组术语 b:

b = set(['risk','factor','effect','affect','impact'])

我想查找至少包含 b 中的一个术语的术语。我尝试了以下方法:

for t in b:
    for term in terms:
        if t in term:
            a.extend(term)

它导致这个输出:

'a', 'n', 'i', ' ', 'f', 'a', 'c', 't', 'o', 'r', 'e', 'c', 'o', 'n', 'o', 'm', ' ', 'f', 'a', 'c', 't', 'o', 'r', 'f', 'a', 'c', 't', 'o', 'r', ' ', 'a', 'f', 'f', 'e', 'c', 't', 'f', 'a', 'c', 't', 'o', 'r', ' ', 'c', 'a', 'u', 's', 'f', 'a', 'c', 't', 'o', 'r', ' ', 'c', 'o', 'n', 't', 'r', 'o

【问题讨论】:

  • a.extend(term) => a.append(term)
  • a = [term for t in b for term in terms if t in term]
  • 谢谢。这行得通。

标签: python string for-loop list-comprehension string-matching


【解决方案1】:

使用append 而不是extend -- 谷歌区别:-)

一个不错的 Pythonic 解决方案是这种带有条件的双重列表理解:

[t for w in b for t in terms if w in t]

输出:

[
 'materi advers effect',
 'mani factor',
 'materi advers impact',
 'materi impact',
 'materi advers affect',
 'materi affect',
 'market risk'
]

这能让你得到你所追求的吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多