在Python中比较两个大小不同的列表

2024-04-29 02:14:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两张不同尺寸的单子。一个有产品名称,另一个有品牌名称(可以是一个词或多个词)。 我需要检查产品名称是否有确切的品牌名称(存在于品牌列表中)并提取相同的其他返回空列表。 我在提取匹配的品牌名称时面临问题,因为品牌可能包含多个单词。在

例如: 输入如下:

Product_Titles =[['Best abc def hair oil'],['laptop erg eds ram 15 GB'],['oops dfr watch']]

Brand_List = [['abc def'],['dfe sdf sd'],['erg eds']]

#Expected Output :
Brand = [['abc def'],['erg eds'],[]]

正在获取第三个产品标题的空列表,因为我们无法获得任何与品牌列表匹配的品牌。在

备注:

只有完整的品牌名称匹配,我们才应该返回品牌名称。在

我尝试过Regex,但它不起作用,因为如果我们在品牌列表中有'str',在产品标题中有'string',它会将'string'作为品牌。但我需要精确的输出。在

非常感谢所有精彩的回答! 我综合了以下所有建议,并提出了我的建议。

解决方案:

Solution Code


Tags: 名称标题列表string产品尺寸def建议
2条回答

您可以使用列表理解:

Product_Titles =[['abc def hair oil'],['erg eds laptop'],['oops dfr watch']]
Brand_List = [['abc def'],['dfe sdf sd'],['erg eds']] 
titles = [[[i] if b.startswith(i) else [] for [i] in Brand_List] for [b] in Product_Titles]
final_titles = [filter(None, i)[0] if any(i) else [] for i in titles]

输出:

^{pr2}$

对于python 2或3,如何解决此任务应该没有区别,只需循环Product_Titles并将匹配项保存为返回值:

Product_Titles =[['Best abc def hair oil'],['laptop erg eds ram 15 GB'],['oops dfr watch']]
Brand_List = [['abc def'],['dfe sdf sd'],['erg eds']]
ret = []

for product in Product_Titles:
  for brand in Brand_List:
    if brand[0] in product[0]:
      ret.append(brand)
      break
  else:
    ret.append([])
print(ret)
>> [['abc def'], ['erg eds'], []]

如果任何一个习语不清楚,请随意询问它们的意思。另外,如果行空间很宝贵,则此解决方案也可以表示为列表理解:

^{pr2}$

这两者之间是有区别的,到目前为止,break在理解中并不存在。如果一个产品中存在多个品牌,它们将全部列在返回的列表中。这似乎是合理的,但实际上我会假设你也希望这种行为也在循环中。在

另外,请注意,the google python stylesheet不鼓励使用超过一行(80个字符)的理解,而是使用循环。在

相关问题 更多 >