基于相同时间的Python减法数组

基于相同时间的Python减法数组,python,arrays,numpy,Python,Arrays,Numpy,是否有一种方法可以减去两个数组,但要确保减去的元素具有相同的日、小时、年或分钟值 list1 = [[10, '2013-06-18'],[20, '2013-06-19'], [50, '2013-06-23'], [15, '2013-06-30']] list2 = [[5, '2013-06-18'], [5, '2013-06-23'] [20, '2013-06-25'], [20, '2013-06-30']] 寻找: list1-list2 = [[5, '2013-06-1

是否有一种方法可以减去两个数组,但要确保减去的元素具有相同的日、小时、年或分钟值

list1 = [[10, '2013-06-18'],[20, '2013-06-19'], [50, '2013-06-23'], [15, '2013-06-30']]
list2 = [[5, '2013-06-18'], [5, '2013-06-23'] [20, '2013-06-25'], [20, '2013-06-30']]
寻找:

 list1-list2 = [[5, '2013-06-18'], [45, '2013-06-23'] [10, '2013-06-30']]

我认为此代码符合您的要求:

list1 = [[10, '2013-06-18'],[20, '2013-06-19'], [50, '2013-06-23'], [15, '2013-06-30']]
list2 = [[5, '2013-06-18'], [5, '2013-06-23'], [20, '2013-06-25'], [20, '2013-06-30']]
list1=dict([[i[1],i[0]] for i in list1])
list2=dict([[i[1],i[0]] for i in list2])
def minus(a,b):
    return { k: a.get(k, 0) - b.get(k, 0) for k in set(a) & set(b) }

minus(list2,list1)

# returns the below, which is now a dictionary
{'2013-06-18': 5, '2013-06-23': 45, '2013-06-30': 5}
# you can convert it back into your format like this
data = [[value,key] for key, value in minus(list1,list2).iteritems()]
但您的输出数据似乎有错误。如果要将数据包含在任一列表中,请按如下方式定义减号:

def minus(a,b):
    return { k: a.get(k, 0) - b.get(k, 0) for k in set(a) | set(b) }
有关更多信息,请参见上的此答案。

使用一系列列表如何

import itertools
from operator import sub
from collections import defaultdict

def subtract_lists(l1, l2):
    data = defaultdict(list)
    for sublist in itertools.chain(l1, l2):
        value, date = sublist
        data[date].append(value)
    return [(reduce(sub, v), k) for k, v in data.items() if len(v) > 1]

list1 = [[10, '2013-06-18'],[20, '2013-06-19'], [50, '2013-06-23'], [15, '2013-06-30']]
list2 = [[5, '2013-06-18'], [5, '2013-06-23'], [20, '2013-06-25'], [20, '2013-06-30']]

>>> subtract_lists(list1, list2)
[(-5, '2013-06-30'), (45, '2013-06-23'), (5, '2013-06-18')]
>>> # if you want them sorted by date...
>>> sorted(subtract_lists(list1, list2), key=lambda t: t[1])
[(5, '2013-06-18'), (45, '2013-06-23'), (-5, '2013-06-30')]
请注意,日期2013-06-30的差值为-5,而不是+5


这是通过将日期用作给定日期的所有值列表的字典键来实现的。然后选择列表中有多个值的列表,并通过减法减少这些列表中的值。如果要对结果列表进行排序,可以使用日期项作为键的
sorted()
。如果您一直想要这种行为,可以将该操作移动到
subtract\u lists()
函数中。

这有什么问题吗?你在这方面面临的问题是什么?@AnandSKumar我从一个数据库中提取,我将得到一个数组,我需要确保我考虑到数据的间隙,其中一个数组的时间值与另一个数组的时间值不相同
list1
'2013-06-18'
两次,为什么不
[25,'2013-06-18']…
@johnlaroy是的,你是对的,这是mineLets get technical的一个错误-是这些列表,即iList列表,还是
numpy
数组。如果数组是什么数据类型和形状?