код, который я поставил ниже, делает то, что вы просили. К сожалению, он не использует понимание списка. Сначала я написал функцию, которая находит индексы первого значения ниже нуля и первого значения выше нуля.
import numpy as np
a = np.array([0.683, 0.819, 0.678, 1.189, 1.465, 0.93 , 0.903, 1.321, 1.321, 0.785, 0.875])
### if a number is below ONE but in a position between the first true below zero and the first false above zero
### then it's false
## find the two indexes of the first value below 1 and the first value above 1
def find_indx(a):
first_min=0
for i in range(len(a)):
if(a[i]<1):
first_min=i
break
first_max=0
for i in range(len(a)):
if(a[i]>1):
first_max=i
break
return([first_min,first_max])
Используя эту функцию, вы можете установить в false значения, которые ниже нуля, но находятся в интервале между первым ниже нуля и первым выше нуля. Два индекса хранятся в «false_range».
Как только вы это сделаете, это довольно просто. Первый пункт всегда верен. Если индексы находятся между «false_range» и ниже нуля, они становятся ложными. Если точки находятся за пределами «ложного диапазона», их значение зависит от того, превышают они 1 или ниже.
false_range=find_indx(a)
truth_list=[]
for i in range(len(a)):
## the first value is always true
if(i==0):
truth_list.append(True)
else:
## if the index is between the false_range and
## this value is below 1 assign False
if(i>false_range[0] and i<false_range[1] and a[i]<1):
truth_list.append(False)
## in all the other cases it depends only if the value is below or above zero
elif(a[i]>1):
truth_list.append(False)
elif(a[i]<1):
truth_list.append(True)
print(truth_list)
[True, False, False, False, False, True, True, False, False, True, True]
Распечатанный список соответствует тому, который вы дали, но, пожалуйста, проверьте это решение перед его использованием.