【问题标题】:How can i match a list of strings against another如何将字符串列表与另一个匹配
【发布时间】:2020-10-05 14:18:58
【问题描述】:

我有 2 个字符串列表:

['Tipo de fertilizante',
 'N',
 'P2O5',
 'K2O',
 'S',
 'CaO',
 'MgO',
 'Zn',
 'Solubilidad g/100cc H2O',
 'Precio (€/100 kg)',
 '€/UF (N)',
 '€/UF (P2O5)',
 '€/UF (K2O)',
 '€/UF (S)',
 '€/UF (CaO)',
 '€/UF (MgO)',
 'JERARQUIA - (N)',
 'JERARQUIA - (P2O5)',
 'JERARQUIA - (K2O)',
 'JERARQUIA - (S)',
 'JERARQUIA - (CaO)',
 'JERARQUIA - (MgO)',
 'Abono']

这是第二个:

['JERARQUIA - (N)',
 'JERARQUIA - (P2O5)',
 'JERARQUIA - (K2O)',
 'JERARQUIA - (S)',
 'JERARQUIA - (CaO)',
 'JERARQUIA - (MgO)']

我想获取包含在第二个元素中的第一个元素,因此所需的结果是:

['N',
 'P2O5',
 'K2O',
 'S',
 'CaO',
 'MgO', 
 'JERARQUIA - (N)',
 'JERARQUIA - (P2O5)',
 'JERARQUIA - (K2O)',
 'JERARQUIA - (S)',
 'JERARQUIA - (CaO)',
 'JERARQUIA - (MgO)',]

我查看了this 的答案,这是我尝试过的:

[s for s in list_1 if any(i in s for i in list_2)]

但我得到的结果是:

['JERARQUIA - (N)',
 'JERARQUIA - (P2O5)',
 'JERARQUIA - (K2O)',
 'JERARQUIA - (S)',
 'JERARQUIA - (CaO)',
 'JERARQUIA - (MgO)']

这不是我想要的。经过很多次和第四次,我仍然不明白如何才能达到我需要的结果。

我该怎么做?

非常感谢您。

【问题讨论】:

  • 'P2O5' 等不在第二个列表中,为什么这些也会被返回?
  • @Sayse 它们是子字符串。好好看看:)

标签: python python-3.x string list match


【解决方案1】:

试试这个:

[s for s in list_1 if any(s in i for i in list_2)]

(说明:我们在您的示例中检查 s in i 而不是 i in s,这会导致结果不同)

【讨论】:

  • @Miguel2488 - 如果您将AR 添加到list_1,您可能会对结果感到有些惊讶。
【解决方案2】:

您可以通过嵌套的 for 循环来做到这一点。 它会使程序有点冗长,但它会让你确信它会工作。

list_3 = []
for i in list_1:
    for j in list_2:
        if i == j:
            list_3.append(i)

这样试试吧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-13
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    相关资源
    最近更新 更多