计算python中两个列表元素之间的差异

我想将两个列表的元素相减,并用 python 中干净高效的代码将它们列出来:


例如,给定两个列表[2,7,8], [1,9],减去(成对)元素将得到:[1, 7, 6, 2, 7, 1]。


我想出了两个代码:


代码1:


l1,l2 = [1], [3,4]

l3,l4 = [2,7,8], [1,9]


def computedifference(list1,list2):

  output = []

  for i in list1:

    for j in list2:

      output.append(abs(i-j))

  return output

print(computedifference(l1,l2))

print(computedifference(l3,l4))

代码2:


import numpy as np 


l1,l2 = [1], [3,4]

l3,l4 = [2,7,8], [1,9]


def computedifference(list1,list2):

  output1 = [ np.asarray(list1)-x for x in np.asarray(list2)]

  output = [np.abs(x) for x in output1]

  return output

print(computedifference(l1,l2))

print(computedifference(l3,l4))

   

预期产出


[2, 3]

[1, 7, 6, 2, 7, 1]

有没有更好的、Pythonic 且有效的方法?


jeck猫
浏览 1470回答 6
6回答

长风秋雁

让我们尝试一下outer:np.abs(np.subtract.outer(l3,l4)).ravel()输出:array([1, 7, 6, 2, 7, 1])

胡说叔叔

问题最有效地计算可迭代对象的笛卡尔积并减去结果的 Pythonic 方法。解决方案最简单、最Pythonic的方法:[ abs(i-j) for i,j in itertools.product(list1, list2) ]根据数据集的大小,您可能需要使用生成器表达式。( abs(i-j) for i,j in itertools.product(list1, list2) )请注意,您不需要显式定义 l1 和 l2,因为 itertools.product 采用可n迭代对象。您可以简单地执行以下操作:l = [[1], [3,4]] ( abs(i-j) for i,j in itertools.product(*l) )

慕的地6264312

import itertoolsdef computedifference(list1,list2):    return [abs(i-j) for i,j in itertools.product(list1,list2)]itertools.product 的文档:https://docs.python.org/2/library/itertools.html#itertools.product

月关宝盒

您可以使用numpy 广播来向量化成对差异:import numpy as npl1, l2 = [1], [3,4]l3, l4 = [2,7,8], [1,9]def computedifference(list1, list2):    l1 = np.array(list1)    l2 = np.array(list2)        return np.abs(l1[:,None] - l2).ravel().tolist()computedifference(l1,l2)[2, 3]computedifference(l3,l4)[1, 7, 6, 2, 7, 1]

沧海一幻觉

你可以使用:>>> np.abs(a[:, np.newaxis] - b).flatten()array([1, 7, 6, 2, 7, 1])

开心每一天1111

l1 = [2,7,8]l2 = [1,9]def computedDiff(list1,list2):    return([abs(i-j) for i in list1 for j in list2])print(computedDiff(l1,l2))        好吧,基本上我在这里所做的就是将其压缩为一行,并且只是以列表形式返回整个 for 循环。只是一种更干净的方法,因为它不包含任何其他变量或附加到列表。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python