Python продолжает возвращать пустой список при попытке добавления?

#python #for-loop #append

#python #для цикла #добавить

Вопрос:

совершенно новичок в python и пытается изучить циклы for. Пытаюсь взять значения из двух списков для вычисления ИМТ каждого человека, но продолжаю получать пустой список.

 heights = [184, 177, 190, 188, 159, 166]

weights = [84.9, 81.8, 86.1, 92.2, 69.6, 72.0 ]

BMIS = []

for i, bmi in BMIS:

  BMIS.append(weights[i] / heights[i])

print(BMIS)
  

Комментарии:

1. Слишком очевидно, BMIS это пустой список. итерация будет выполняться 0 раз.

Ответ №1:

Вы выполняете цикл по пустому списку. Просто используйте zip для перебора каждого списка сразу.

 for height, weight in zip(heights, weights):
    BMIS.append(weight / height)
  

Это понимание приведет к тому же списку:

 BMIS = [weight/height for height, weight in zip(heights, weights)]
  

Комментарии:

1. Большое спасибо! Я впервые вижу функцию zip. Отличная помощь!!

Ответ №2:

В списке нет ничего, что вы пытаетесь перебрать. Код в теле цикла for никогда не будет выполнен. Вы можете изменить свой цикл for на:

 for height, weight in zip(heights, weights):
    BMIS.append(weight/height)
  

Ответ №3:

Вы перебираете BMI, это пустой список.перебирайте максимумы или веса

 heights = [184, 177, 190, 188, 159, 166]
weights = [84.9, 81.8, 86.1, 92.2, 69.6, 72.0 ]
BMIS = []
for i in range(len(heights)):
    BMIS.append(weights[i] / heights[i])
 print(BMIS)
  

Комментарии:

1. Никогда не осознавал, и я смотрю на это уже несколько часов, лол. Большое спасибо!

Ответ №4:

Предполагая, что список высот и весов всегда имеет один и тот же len(), вы можете использовать его в качестве своего диапазона

 heights = [184, 177, 190, 188, 159, 166]

weights = [84.9, 81.8, 86.1, 92.2, 69.6, 72.0 ]

BMIS = []

for i in range(len(heights)):

  BMIS.append(weights[i] / heights[i])

print(BMIS)
  

Комментарии:

1. Большое спасибо! Не думал, что смогу использовать подобную функцию len, отлично сработало!

Ответ №5:

Добро пожаловать в StackOverflow. Давайте проверим ваш основной цикл for:

 for i, bmi in BMIS:

  BMIS.append(weights[i] / heights[i])
  

Поскольку вы инициализируете BMIS = [] , вы выполняете итерацию по пустому списку. Лучшим подходом является повторение в диапазоне, подобном этому:

 for i in range(0, len(heights)):
    BMIS.append(weights[i] / heights[i])
  

Таким образом, вы получаете доступ к i-й позиции каждого списка, выполняете разделение и добавляете результат в свой BMIS список.