Python:在python中找到两个数组之间的差异

时间:2018-04-05 09:36:30

标签: python python-2.7

我在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)]

5 个答案:

答案 0 :(得分:3)

这是实现目标的一种方式。首先,我创建了从ID到其他值的词典:

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

明显的不精确是由于浮点表示。要解决这个问题(如果这很重要),请使用XSSFWorkbook Workbook = new XSSFWorkbook(); ISheet DeliveryReportsSheet = Workbook.CreateSheet("Upcoming Schedules"); int rowCounter = 0; IRow Headers = DeliveryReportsSheet.CreateRow(rowCounter); Headers.CreateCell(0).SetCellValue("Resource ID"); Headers.CreateCell(1).SetCellValue("Schedule Name"); Headers.CreateCell(2).SetCellValue("Task Name"); Headers.CreateCell(3).SetCellValue("Next Trigger Date Launch"); 或舍入值。

答案 1 :(得分:2)

这将遍历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)]

答案 2 :(得分: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)]

答案 3 :(得分:1)

这是我的尝试,使用两个列表推导:

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)]

答案 4 :(得分:0)

这是一种方法。

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