【问题标题】:For each item in a list, iterate over all other items of another list, output an array - python对于列表中的每个项目,遍历另一个列表的所有其他项目,输出一个数组 - python
【发布时间】:2018-02-04 09:11:57
【问题描述】:

我有两个 python 列表(nltk 同义词集)。对于第一个列表中的每个项目,我想遍历第二个列表的所有项目并输出一个值,该值使用第二个列表的项目作为方法的参数将方法应用于第一个列表。

例子:

l1 = [wn.synset('i.n.03'), wn.synset('need.v.03'), wn.synset('aid.n.01')]
l2 = [wn.synset('help.v.01'), wn.synset('girl.n.01')] 

对于 l1 中的每个项目,我想计算 l2 中每个项目的相似度得分,从而生成一个 3x2 矩阵,其中包含每个可能的 2 路组合的相似度得分,其中包含来自 l1 的一个值和来自 l2 的一个值。

我可以按如下方式计算矩阵的第一行:

fwrd= l1[0]
frow= np.asfarray([fwrd.path_similarity(i) for i in l2])

产生 frow 的值

array([        nan,  0.06666667])

这个数组的第一个值是 wn.synset('i.n.03') 和 wn.synset('help.v.01') 之间的相似度得分 第二个值是之间的相似度得分 wn.synset('i.n.03') 和 wn.synset('girl.n.01')

数组中的第二行将包含 l1 中的第二个项目与 l2 中的两个项目之间的相似度分数,等等。

我尝试了一些笨拙的方法到达那里,但没有任何运气。谢谢你的帮助。另外,我真的很想了解代码解决方案的工作原理,因此任何参考资料都会有所帮助。

【问题讨论】:

  • 谢谢。我想我需要 itertools 但不知道是哪个功能。对那些可能正在尝试做类似事情的人进行一些改进。为了得到提到的数组,我实际上使用了:np.asfarray([i.path_similarity(j) for i,j in itertools.product(l1,l2)]).reshape(len(l1),len(l2))

标签: arrays python-3.x list iterable


【解决方案1】:

嵌套列表推导应该提供您正在寻找的输出:

[[fwrd.path_similarity(i) for i in l2] for fwrd in l1]

只需将此传递给np.ndarray()

【讨论】:

  • 谢谢。我想我需要 itertools 但无法弄清楚哪个功能。对于那些可能正在尝试做类似事情的人来说,稍微改进一下。为了得到提到的数组,我实际上使用了:np.asfarray([i.path_similarity(j) for i,j in itertools.product(l1,l2)]).reshape(len(l1),len(l2))
  • @RosieMB 您可以发布自己问题的答案,在 cmets 中很难看到答案。
猜你喜欢
  • 2016-04-14
  • 1970-01-01
  • 2021-12-22
  • 2023-03-17
  • 1970-01-01
  • 2017-09-28
  • 2022-11-03
  • 2016-05-18
  • 2022-11-07
相关资源
最近更新 更多