У меня есть два списка. list1[4,3,2,5,6,0,0,1]
и list2[1,2,5,0,7,0,1,8]
.I должны проверить процентное изменение WRT list1
. Если процент роста положительный, отметьте его как 1
. Мой код:
percent_growth = []
target = []
for i in range(0,len(list1)):
if list1[i] == 0:
percent_growth.append(-9999)
target.append(0)
continue
growth = (list2[i]-list1[i])/list1[i]
percent_growth.append(growth*100)
if growth > 0:
target.append(1)
else:
target.append(0)
Но мой результат:
percent_growth:[-9999,-9999]
Проблема с вашим кодом заключается в том, что при повторной проверке вы проверяете значение 0 в списке1, вы используете значение продолжения по умолчанию для -9999 и 0. следующий пост кода должен оставаться за пределами условия if.
growth = (list2[i]-list1[i])/list1[i]
percent_growth.append(growth*100)
if growth > 0:
target.append(1)
else:
target.append(0)
Вы можете использовать понимание списка. запишите два списка
a=[4,3,2,5,6,0,0,1]
b=[1,2,5,0,7,0,1,8]
zip (a, b) создает кортеж из двух списков. Затем используйте понимание списка для достижения.
per_growth = [-9999 if x == 0 else (((y - x) * 100) / x) for x, y in zip(a, b) ]
target = [ 1 if t > 0 else 0 for t in per_growth ]
print([(x,y) for x,y in zip(per_growth, target)])
Ответ:
[(-75.0, 0), (-33.333333333333336, 0), (150.0, 1), (-100.0, 0), (16.666666666666668, 1), (-9999, 0), (-9999, 0), (700.0, 1)]
Отредактированный ответ, основанный на комментариях. Благодарю.
target
значения неверны. Предполагается, что они равны 1, если рост положительный, в противном случае 0.
growth = [100 * (y - x) / x if x else -9999 for x, y in zip(a, b)]; target = [int(u > 0) for u in growth]