Как сравнить значения одного и того же индекса в нескольких списках и вывести время начала и время окончания, если условие не удовлетворяет? - PullRequest
0 голосов
/ 30 января 2020

Здесь у меня 6 списков, все они имеют одинаковую длину данных. один - это время, которое содержит время от одной начальной точки до одной конечной точки, а другой список из пяти содержит сигналы.

    time = [11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67]
    A  =   [0,  0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
    B =    [0,  0, 0, 0, 0, 0, 0 ,0 ,0 ,0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2]
    C =    [0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
    D =    [0,  0, 0, 0, 0, 0, 0 ,0 ,0 ,0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2]
    E =    [0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]

Здесь сначала я хочу сравнить список A и B . если в списке A 0 входит и в том же индексе 2 входит в B , и если оно истинно, то во втором условии проверка того же индекса в других трех списках там C должно быть 0, D должно быть 0 и E должно быть 1. Если это условие удовлетворяет, то оно пропускается, но в случае, когда в какой-то момент оно прибывает в другое значение, тогда мне нужно время начала и время окончания.

or j in range(len(time)):
lis = []
lis2 = []
for i in range(len(A)):
    if(A[i] == 0 and B[i] == 2):
        if C == 0 and D == 0 and E == 1:
            lis.append(time[i])
        else:
            lis2.append(time[i])

 print lis
 print lis2

Используя этот код, у меня есть время, когда оно не удовлетворяет, но это не то, что я хочу. Я хочу, чтобы время начала и время окончания были такими:

OUTPUT - [33,42] or [33,34,35,36,37,38,39,40,41,42]

Поскольку в этот период времени 1-е условие истинно, а из того места, где оно не выполняется, 2-е условие оттуда, оно должно печатать время до 1-го условия. указано в выходных данных, то нет необходимости проверять дальше.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 30 января 2020

Используя numpy, вы можете сделать следующее:

import numpy as np

A = np.array(A)
B = np.array(B)
C = np.array(C)
D = np.array(D)
E = np.array(E)
time = np.array(time)

print time[(A == 0)*(B == 2)*(C == 0)*(D == 0)*(E == 1)]

Кстати, ваш пример неверен. Правильный результат - [32, 34, 35, 36, 37, 39, 40, 48, 49, 50, 51, 52], таким образом, есть два периода с правильной схемой (от 31 до 40 и от 48 до 52).

0 голосов
/ 30 января 2020

Я думаю, это то, что вы хотите.

or j in range(len(time)):
lis = []
lis2 = []
bool = false
for i in range(len(A)):
    if bool:
        break
    if(A[i] == 0 and B[i] == 2):
        if C == 0 and D == 0 and E == 1:
            lis.append(time[i])
        else:
            bool = true
            lis2.append(time[i])

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