【问题标题】:Function per iteration in 2 list/arrays2个列表/数组中每次迭代的函数
【发布时间】:2019-03-21 02:48:10
【问题描述】:

我正在尝试在 python 中迭代 2 个列表,并为每次迭代处理一个函数。 假设 A = [40,30,25] 和 B = [45,35,25]。 (但是,在我的实际应用中,A 和 B 是句子的数组)

我希望我的结果函数做这样的事情:

For A[1] & B[1]:
    print("Sum: ", A[1] + B[1])
For A[1] & B[2]: 
    print("Sum: ", A[1] + B[2])
For A[1] & B[3]:
    print("Sum: ", A[1] + B[3])

For A[2] & B[1]:
    print("Sum: ", A[2] + B[1])
For A[2] & B[2]:
    print("Sum: ", A[2] + B[2])
For A[2] & B[3]:
    print("Sum: ", A[2] + B[3])

For A[3] & B[1]:
    print("Sum: ", A[3] + B[1])
For A[3] & B[2]:
    print("Sum: ", A[3] + B[2])
For A[3] & B[3]:
    print("Sum: ", A[3] + B[2])

我确实知道这本质上是一个嵌套的 for 循环,但我现在似乎无法完全按照我想要的方式运行它。通过我自己的研究,似乎我需要使用 itertools zip 功能才能正确处理。

我目前的代码如下:

for x,y in itertools.zip_longest(lst1, lst2, fillvalue=None):
        print("X: ",x, "\tY: ",y, "\nZ: ", nlp(x).similarity(nlp(y)))

感谢任何帮助! 谢谢。

【问题讨论】:

  • 您是否在寻找[f(x, y) for x in A for y in B](其中f 代表您想要对xy 执行的任何操作)?
  • 是的,我想是的。那么我真正需要做的是比较 A 中的每个元素与 B 中的每个元素之间的相似性。如果达到相似性,我将它保存到另一个数组中。不是 100% 熟悉数学表达式,但这就是我在用文字寻找的内容!
  • “如果实现了相似性” - 这对于 nlp(x).similarity(nlp(y) 的输出意味着什么?
  • 我实际上不确定我是否在自己的代码中正确完成了 x/y。虽然经过几次试验,“nlp(x).similarity(nlp(y)”返回一个介于 0 和 1 之间的浮点数(1 相同,0 完全不同)。X 和 Y 是字符串(句子,而不是单词)跨度>
  • 在那种情况下,像import math; result = [z for z in (nlp(x).similarity(nlp(y) for x in A for y in B) if math.isclose(z, 1.)]这样的东西怎么样。

标签: python loops for-loop nested iteration


【解决方案1】:

您不需要使用 itertools。 @coldpseed 的评论是一个很好的简洁答案。写得更扩展看起来像:

for x in A:
    for y in B:
        print("X: ",x, "\tY: ",y, "\nZ: ", nlp(x).similarity(nlp(y)))

或者交替使用索引

for i in range (0, len(A)):
    for j in range (0, len(B)):
        x = A[i]
        y = B[j]
        print("X: ",x, "\tY: ",y, "\nZ: ", nlp(x).similarity(nlp(y)))

【讨论】:

  • 这很好,但需要一些工作。 OP 很可能希望保留结果。我建议,如果使用嵌套循环,初始化一个空列表并附加到它。如果您知道它在做什么,您也可以随意将我的评论添加到您的答案中。
  • 第三次挑剔:如果有一个好的方法可以做某事,你几乎不想推荐一个更糟糕的解决方案作为替代方案。在这种情况下,我建议放弃迭代索引的建议,这里几乎肯定不需要它,而且这两个选项中较差的一个。
  • 感谢 cmets。我将保持原样,因为在第 1 点上,它似乎已经使用他的示例函数解决了 OP 的问题,而在第 2 点上,我认为使用索引在客观上并不更糟。谢谢!
猜你喜欢
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
  • 2021-02-27
  • 2020-05-28
  • 1970-01-01
  • 2021-12-02
  • 2017-06-29
  • 1970-01-01
相关资源
最近更新 更多