我在python中有两个数组。
arr1 = [(7, 0.78, 7920), (8, 0.9, 9000)]
arr2 = [(7, 1.68, 8460)]
在这个数组中,第一个值是ID
(7,8,7)。我想要ID
的结果基础。如果ID相同则在其他两个值之间得到差异
在arr1
和arr2
ID 7之间相同则减法(1.68-0.78 = 0.9)和(8460-7920 = 540)否则它将是相同的。
如何获得这样的结果?
diffArray = [(7, 0.9, 540), (8, 0.9, 9000)]
答案 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