gpt4 book ai didi

python - 比较列表(A)中的项目是否作为列表(B)中的子项目存在

转载 作者:行者123 更新时间:2023-12-01 07:29:28 27 4
gpt4 key购买 nike

我有 2 个列表,每个列表都是字符串集合,并且想要检查项目是否为 list(A)存在于 list(B) 的另一项中。所以在 list(A)有一些标准单词和短语应该在 list(B) 中找到。我填List(A)有了这个(e.g. "innovation", "innovative", "new ways to go")lemmatized(['innovation'], ['innovative'], ['new', 'way', 'go'] .

list(B)tokenizedlemmatized文本句子('time', new', 'way', 'go'] .

在该模式中,我尝试分析文本中给定单词和短语是否出现以及出现的频率。

为了匹配模式,我读到需要将每个列表元素本身转换为字符串,以检查它是否是 list(b) 中字符串的子字符串。 .

    list_a = [['innovation'], ['innovative'], ['new', 'way', 'go'], ['set', 'trend']]
list_b = [['time', 'innovation'], ['time', 'go', 'new', 'way'], ['look', 'innovative', 'creative', 'people']]

for x in range(len(list_a)):
for j in range(len(list_b)):
a = " ".join(list_a[x])
if any(a in s for s in list_b[j]):
print("word of list a: ", a, " appears in list b: ", list_b[j]) `

实际输出是:

word of list a:  innovation  appears in list b:  ['time', 'innovation']
word of list a: innovative appears in list b: ['look', 'innovative', 'creative', 'people']

我的目标输出是:

word of list a:  innovation  appears in list b:  ['time', 'innovation']
word of list a: innovative appears in list b: ['look', 'innovative', 'creative', 'people']
word of list a: new way go appears in list b: ['time', 'go', 'new', 'way']

转换 list(b) 的项目像我尝试过的字符串 list(a)没有帮助我。

感谢您的帮助!

最佳答案

第一个错误是:不要从单词列表中创建字符串。使用单词的 set 和 set 方法(此处:issubset)

  • 将单词列表转换为单词集列表
  • 在第一个列表 (a) 的集合中循环,并检查该集合是否包含list_b 的一个集合中(不使用 any 否则我们无法知道哪个集合包含当前集合,一个简单的循环就可以了)

像这样:

list_a = [['innovation'], ['innovative'], ['new', 'way', 'go'], ['set', 'trend']]
list_b = [['time', 'innovation'], ['time', 'go', 'new', 'way'], ['look', 'innovative', 'creative', 'people']]

list_a = [set(x) for x in list_a]
list_b = [set(x) for x in list_b]

for subset in list_a:
for other_subset in list_b:
if subset.issubset(other_subset):
print("{} appears in list b: {}".format(subset,other_subset))

打印:

{'innovation'} appears in list b: {'time', 'innovation'}
{'innovative'} appears in list b: {'look', 'creative', 'innovative', 'people'}
{'new', 'go', 'way'} appears in list b: {'time', 'new', 'go', 'way'}

现在,如果您想保留顺序,但仍希望受益于元素测试的 set 的优势,只需为 list_b 创建元组列表,因为它是迭代了几次。无需对 list_a 执行相同操作,因为它仅迭代一次:

# list_a is now unchanged
list_b = [(set(x),x) for x in list_b]

for sublist in list_a:
subset = set(sublist)
for other_subset,other_sublist in list_b:
if subset.issubset(other_subset):
print("{} appears in list b: {}".format(sublist,other_sublist))

结果:

['innovation'] appears in list b: ['time', 'innovation']
['innovative'] appears in list b: ['look', 'innovative', 'creative', 'people']
['new', 'way', 'go'] appears in list b: ['time', 'go', 'new', 'way']

算法的成本仍然很高:O(n**3),但由于 O(n) 而不是 O(n**4) > 设置查找(与列表查找相比)来测试单词列表是否包含在另一个单词列表中。

关于python - 比较列表(A)中的项目是否作为列表(B)中的子项目存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57286611/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com