【问题标题】:efficient way to extract list elements containing at least a term of another list提取至少包含另一个列表项的列表元素的有效方法
【发布时间】:2018-07-09 07:55:20
【问题描述】:

我有 2 个列表。 一个是字符串列表。称它为A。 另一个是术语列表。叫它B。

我需要从字符串列表中提取至少包含术语列表中的术语的元素。

嵌套的for循环显然是一种可能性:

for a in A:
    for b in B:
        if b in a:
            print (a)

这是 O(n^2),这不是一个好方法,因为 A 很长(10 亿个字符串!)。

我认为的另一个解决方案是: 拆分 a 并按长度对其进行排序,然后使用倒排列表方法。

我还没有计时,但应该会好一些。

非常欢迎任何关于替代方法的提示!

【问题讨论】:

  • 你能用任何示例测试用例解释一下吗?
  • 同意,目前尚不清楚您的数据具有什么形状。

标签: python performance list


【解决方案1】:

只使用集合:

from itertools import chain

set_a = set(a)
terms = set(chain.from_iterable(b))
has_terms = set_a & terms

【讨论】:

  • 酷。和蔼可亲。我会计时的。谢谢!
  • @user3623123 我不确定它是否正确。可以加个输入输出的例子吗?
  • @user3623123:是的,请提供样品A、B和预期结果,以便我们验证。
猜你喜欢
  • 2022-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-09
  • 1970-01-01
  • 2016-05-09
相关资源
最近更新 更多