сравнение и добавление списков Python различной длины - PullRequest
0 голосов
/ 28 июня 2018

У меня есть два списка времени (time, который имеет 140 элементов с различными отметками времени, и sessionStart, который имеет 13 элементов, документирующих начало испытания). Мне нужно сравнить эти два списка, чтобы найти, когда каждый элемент в time больше, чем первый элемент в sessionStart, но меньше, чем второй элемент в sessionStart. Код должен добавить первый элемент sessionStart, если он соответствует пустому списку start. При запуске start остается пустым

x = 0
while x < len(time):
    i = 0
    while i < len(sessionStart)-1 and x < len(time):
        if time[x] >= sessionStart[i] and time[x] < sessionStart[i+1]:
            start.append(sessionStart[i])
            i += 1
        else:
            x += 1

1 Ответ

0 голосов
/ 28 июня 2018

список start должен быть объявлен до того, как вы сможете его использовать, и должен быть вне любых используемых вами циклов, иначе он будет перезаписан.

Вы также можете выполнять итерации по этим спискам намного проще с парой функций Python:

    start = []

    for element in time:
        for i in range(len(sessionStart)-1):
            if element >= sessionStart[i] and element < sessionStart[i+1]:
                start.append(sessionStart[i])
  • for x in my_list будет перебирать каждый элемент (который может быть используется с переменной x) в списке с именем my_list.
  • for in range(value) повторяется от 0 до длины (значение-1), поэтому нет необходимости использовать индексные переменные и каждый раз добавлять к ним 1

Кроме того, если вы пытаетесь сравнивать временные метки, вам следует преобразовать их в объекты даты и времени, используя библиотеку datetime

Например, если ваша временная метка была '2018-08-15', вы можете превратить ее в дату для сравнения, выполнив datetime.datetime.strptime(timestamp, '%Y-%m-%d')

Таким образом, используемый в цикле, будет выглядеть так:

    from datetime import datetime
    start = []

    for timestamp in time:
        timestamp = datetime.strptime(timestamp, '%Y-%m-%d')
        for i in range(len(sessionStart)-1):
            if timestamp >= datetime.strptime(sessionStart[i], '%Y-%m-%d')
                and timestamp < datetime.strptime(sessionStart[i+1], '%Y-%m-%d'):
            start.append(sessionStart[i])

Конечно, если предположить, что ваши метки времени имеют формат YYYY-MM-DD, а я уверен, что это не так, вам придется обновить строку формата в соответствии с вашим форматом меток времени, вы также можете получить секунды, миллисекунды. , минут и т. д. по вышеуказанной ссылке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...