Python两个列表在两个循环中

2024-03-29 01:53:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个清单:

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返回different的最小值,例如:

^{pr2}$

打印列表3给我:

在[日期时间。时间增量(0,2976),日期时间。时间增量(330187),日期时间。时间增量(330198),日期时间。时间增量(66277),日期时间。时间增量(32287年),日期时间。时间增量(322998年),日期时间。时间增量(585477)

所有的都在同一个列表中。 在list3[0]中,我可以得到list1中第一个元素的最小值,但是如果我在列表1中有元素3,我如何获得第二个元素的最小值list3[3]并循环?在

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


Tags: 元素列表时间增量list2differentlist1pr2
3条回答

如果您想同时迭代两个列表,可以zip并同时迭代它们。然后比较这些值并将所需的值附加到结果列表中。在

list1 = [1, 2, 3]
list2 = [0, 3]
list3 = []
for (x, y) in zip(list1, list2):
    z = min(x, y) 
    list3.append(z)

注意,结果将是较小列表的大小,本例中是list2。在

首先,Python不知道字符串代表日期。你不能把数据扔进一个字符串,然后期望解释器知道你想要什么。所以,你只会得到一个错误,因为“-”操作符对字符串没有任何意义。在

如果您想比较两个日期,我建议您阅读Python内置的datetime模块:https://docs.python.org/2/library/datetime.html

如果我理解正确,您可以在不同的列表中分隔时间增量,然后使用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的每个元素到{}的所有元素之间的差异

^{pr2}$

然后您可以使用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]

成为l1和{}你的datetime对象列表。这就产生了

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

相关问题 更多 >