首页 > 解决方案 > Python 两个 For 循环中的两个列表

问题描述

我这里有两个清单:

list1 = [u'2018-05-06T15:53:05.000-0400', '2018-05-06T17:53:05.000-0400']

list2 = [u'2018-05-06T15:32:24.000-0400', u'2018-05-06T15:32:29.000-0400', u'2018-05-06T15:32:36.000-0400', u'2018-05-06T15:53:05.000-0400', u'2018-05-06T16:42:41.000-0400', u'2018-05-10T00:16:12.000-0400', u'2018-05-10T00:16:23.000-0400', u'2018-05-12T17:37:42.000-0400']

我正在尝试比较两个列表中的元素,并返回 list1 中的元素 0 和 list2 中的元素 1 不同的最小值,例如:

for value1 in list1:
    value1 = datetime.strptime(value1, '%Y-%m-%dT%H:%M:%S.000-0400')
    for value2 in list2:
        value2 = datetime.strptime(value2, '%Y-%m-%dT%H:%M:%S.000-0400')
        if value1 < value2:

            value3 = value2 - value1
            list3.append(value3)
 print list3

打印 list3 给我:

[datetime.timedelta(0, 2976), datetime.timedelta(3, 30187), datetime.timedelta(3, 30198), datetime.timedelta(6, 6277), datetime.timedelta(3, 22987), datetime.timedelta( 3, 22998), datetime.timedelta(5, 85477)]

一切都在同一个列表中。在这里list3[0],我可以得到第一个元素的最小值,但是如果我在 list1 中有元素 3,list1我怎么能得到第二个元素的最小值并循环呢?list3[3]

我想将列表中的第一个元素list1和第二个元素的比较结果分开,请让我知道如何实现这一点,非常感谢!

标签: pythonlistloopsfor-loopappend

解决方案


如果我理解正确,您可以将时间增量分隔在不同的列表中,然后仅用于min获取最小值。

使用您自己的代码:

list3=[]
for value1 in list1:
    value1 = datetime.strptime(value1, '%Y-%m-%dT%H:%M:%S.000-0400')
    aux_list = []
    for value2 in list2:
        value2 = datetime.strptime(value2, '%Y-%m-%dT%H:%M:%S.000-0400')
        if value1 < value2:

            value3 = value2 - value1
            aux_list.append(value3)
    list3.append(aux_list)

这样,您list3就掌握了从的每个元素list1到所有元素的差异list2

>>> print(list3)
[[datetime.timedelta(0, 2976), datetime.timedelta(3, 30187), datetime.timedelta(3, 30198), datetime.timedelta(6, 6277)], 
 [datetime.timedelta(3, 22987), datetime.timedelta(3, 22998), datetime.timedelta(5, 85477)]]

min(list[0])然后,您可以使用和第二项获得与第一项的最小差异min(list[1])


请注意,如果您有

l1 = [datetime.strptime(x, '%Y-%m-%dT%H:%M:%S.000-0400') for x in list1]
l2 = [datetime.strptime(x, '%Y-%m-%dT%H:%M:%S.000-0400') for x in list2]

您的整个代码可以使用列表理解写在一行中:

k = [min([v2 - v1 for v2 in l2 if v2>v1]) for v1 in l1]

存在l1l2你的datetime对象列表。这产生

0:49:36 # k[0]
3 days, 6:23:07 # k[1]

推荐阅读