亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

計算python中兩個列表元素之間的差異

計算python中兩個列表元素之間的差異

jeck貓 2023-08-22 16:34:34
我想將兩個列表的元素相減,并用 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 outputprint(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 outputprint(computedifference(l1,l2))print(computedifference(l3,l4))   預期產出[2, 3][1, 7, 6, 2, 7, 1]有沒有更好的、Pythonic 且有效的方法?
查看完整描述

6 回答

?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

讓我們嘗試一下outer

np.abs(np.subtract.outer(l3,l4)).ravel()

輸出:

array([1, 7, 6, 2, 7, 1])


查看完整回答
反對 回復 2023-08-22
?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

問題

最有效地計算可迭代對象的笛卡爾積并減去結果的 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)?)
查看完整回答
反對 回復 2023-08-22
?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

import itertools

def 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


查看完整回答
反對 回復 2023-08-22
?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

您可以使用numpy 廣播來向量化成對差異:

import numpy as np

l1, 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]


查看完整回答
反對 回復 2023-08-22
?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

你可以使用:


>>> np.abs(a[:, np.newaxis] - b).flatten()

array([1, 7, 6, 2, 7, 1])


查看完整回答
反對 回復 2023-08-22
?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

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 循環。只是一種更干凈的方法,因為它不包含任何其他變量或附加到列表。


查看完整回答
反對 回復 2023-08-22
  • 6 回答
  • 0 關注
  • 1541 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號