Рассчитать процентное изменение в двух списках

1

У меня есть два списка. 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]
  • 1
    пожалуйста, отформатируйте код Python
  • 2
    Каков ваш ожидаемый результат?
Показать ещё 2 комментария
Теги:
list

1 ответ

-2

Проблема с вашим кодом заключается в том, что при повторной проверке вы проверяете значение 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)]

Отредактированный ответ, основанный на комментариях. Благодарю.

  • 0
    Ваши target значения неверны. Предполагается, что они равны 1, если рост положительный, в противном случае 0.
  • 1
    Округление - это приятное прикосновение, но ОП не просил об этом, поэтому вам, вероятно, не следует его добавлять. Чтобы сделать это с помощью списков, лучше всего использовать 2 отдельных списка. Это более читабельно, и вам не нужно обрабатывать сложность, что элементы списка могут быть отрицательными. Например, growth = [100 * (y - x) / x if x else -9999 for x, y in zip(a, b)]; target = [int(u > 0) for u in growth]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню