Python два списка в два для циклов - PullRequest
0 голосов
/ 17 мая 2018

У меня есть два списка здесь:

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

Я пытаюсь сравнить элементы в двух списках и вернуть минимальное значение для обоих элементов 0 в списке list1 и элемента 1 в list2, дляпример:

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

печать списка3 дает мне:

[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, но как я могу получить минимальное значение для второго list3[3] и цикла, если у меня есть элемент 3 в списке list1?

Я хотел бы разделить список результатов сравнения для первого элемента в list1 и второго элемента, пожалуйста, дайте мне знать, как этого добиться, высоко ценится!

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

Если я правильно понимаю, вы можете разделить свои дельты времени в разных списках, а затем просто использовать 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]

- l1 и l2 ваш список datetime объектов.Это дает

0:49:36 # k[0]
3 days, 6:23:07 # k[1]
0 голосов
/ 17 мая 2018

Если вы хотите перебрать два списка вместе, вы можете zip их и перебирать их одновременно.Затем сравните значения и добавьте желаемое в список результатов.

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

Обратите внимание, что результатом будет размер меньшего списка, в данном случае list2.

0 голосов
/ 17 мая 2018

Во-первых, Python не знает, что строка представляет дату. Вы не можете просто выбросить данные в строку и ожидать, что интерпретатор знает, что вы хотите. Итак, вы просто получите ошибку, потому что оператор «-» ничего не значит для строк.

Если вы хотите сравнить две даты, я предлагаю прочитать встроенный в Python модуль datetime: https://docs.python.org/2/library/datetime.html

...