簡體   English   中英

Python:在python中找到兩個數組之間的差異

[英]Python : find difference between two arrays in python

我在 python 中有兩個數組。

arr1 = [(7, 0.78, 7920), (8, 0.9, 9000)]
arr2 = [(7, 1.68, 8460)]

在這個數組中,第一個值是ID (7,8,7)。我想要基於ID結果。 如果 ID 相同,則獲得其他兩個值之間的差異。
arr1arr2 ID 7 相同,則減去 (1.68-0.78 = 0.9) 和 (8460-7920 = 540) 否則將相同。 如何得到這樣的結果?

diffArray = [(7, 0.9, 540), (8, 0.9, 9000)]

這是一種方法。 首先,我正在創建從 ID 到其他值的字典:

arr1 = [(7, 0.78, 7920), (8, 0.9, 9000)]
arr2 = [(7, 1.68, 8460)]

dict1 = {i: (x, y) for i, x, y in arr1}
dict2 = {i: (x, y) for i, x, y in arr2}

然后我使用帶有條件的列表理解來做正確的事情:

diffArray = [
    (
        i,
        abs(dict2[i][0] - dict1[i][0]),
        abs(dict2[i][1] - dict1[i][1]),
    )
    if i in dict2
    else (i, dict1[i][0], dict1[i][1])
    for i in dict1
]

結果可能有點出人意料:

[(7, 0.8999999999999999, 540), (8, 0.9, 9000)]

明顯的不精確是由於浮點表示。 為了解決這個問題(如果它很重要),請使用Decimal或舍入這些值。

這將遍歷 arr2 中的每個元素,然后將其添加到 arr1 的正確索引中。 如果它不存在,那么它會以新鮮的方式添加它

arr1 = [(7, 0.78, 7920), (8, 0.9, 9000)]
arr2 = [(7, 1.68, 8460), (6,1,1)]

for j in arr2:
    for ix, i in enumerate(arr1):
        if i[0] == j[0]:
            arr1[ix] = (i[0], j[1]-i[1], j[2]-i[2])
            break
    else:
        arr1.append(j)
arr1

[(7, 0.8999999999999999, 540), (8, 0.9, 9000), (7, 1.68, 8460), (6, 1, 1)]

arr1 = [(7, 0.78, 7920), (8, 0.9, 9000)]
arr2 = [(7, 1.68, 8460)]
arr1.sort(key=lambda x:x[0])
arr2.sort(key=lambda x:x[0])
from itertools import zip_longest
new_list = []
for value1, value2 in zip_longest(arr1, arr2):
    if value2:
        _id1, val3, val4 = value1
        _id2, val5, val6 = value2
        if _id1 == _id2:
            diff1 = val5 - val3
            diff2 = val6 - val4
            new_list.append((_id1, diff1, diff2))
    else:
        new_list.append(value1)
print(new_list)
>>>[(7, 0.8999999999999999, 540), (8, 0.9, 9000)]

這是我的嘗試,使用兩個列表推導式:

arr1 = [(7, 0.78, 7920), (8, 0.9, 9000)]
arr2 = [(7, 1.68, 8460)]

common = [tuple([a[0], b[1] - a[1], b[2] - a[2]]) for a in arr1 for b in arr2 if a[0]==b[0]]
others = [a for a in arr1 for b in arr2 if a[0]!=b[0]]
result = common + others

輸出:

[(7, 0.8999999999999999, 540), (8, 0.9, 9000)]

這是一種方法。

def diffArrays(arr1, arr2):

"""
Parameters
----------
arr1 : array
    firt array.
arr2 : array
    second array to be compared with.

Returns
-------
arr3: array
    array containing only the different elements.
"""
arr3 = []
[arr3.append(el) if el not in arr2 else '' for el in arr1]
[arr3.append(el) if el not in arr1 else '' for el in arr2]

return arr3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM