Добавление смежных элементов в список

#python #python-3.x

#python #python-3.x

Вопрос:

Мне нужно выполнить следующий цикл на python (в псевдокоде, я изучаю python)

 listOfNumbers = [1,2,3]
averagesOfNumbers = [0,0,0]

for i = 1 to 2
   averagesOfNumbers [i] = (listOfNumbers [i]   listOfNumbers[i   1]) / 2
end i
  

averageOfNumbers будет выглядеть как [1.5, 2.5, 0].

Как мне это сделать на Python?

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

1. Что вы подразумеваете под end i ?

2. От 1 до 2 означает только 1?

3. Python для циклов и Как выполнять математику на Python…

4. average = [(nums[i] nums[i 1])/2 for i in range(len(nums)-1)] Я оставлю вас разбираться с этим, и я бы посоветовал посмотреть манипуляции с массивом Python.

Ответ №1:

Посмотрите код, если это то, что вы ищете:

 List=[1,2,3]
avg=[0]*len(List)
for i in range(len(List)-1):
    avg[i]=(List[i] List[i 1])/2
print(avg)
  

Надеюсь, вы получили код.
Вывод:
[1.5,2.5,0]

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

1. list затемняет встроенный класс

Ответ №2:

Вау, это так круто. Я никогда раньше не использовал stackoverflow. Мне всегда было интересно, как заставить умных людей помочь мне!!

Вот что дает мне правильный ответ на мое домашнее задание.

вычислите среднее изменение, наибольшее увеличение, наибольшее уменьшение.

 i = 0
while (i < rowCount - 1):
   diffPL.append(PL[i 1] - PL[i])
    i = i   1
averageChange = sum(diffPL)/len(diffPL)
greatestIncrease = max(diffPL)
greatestDecrease = min(diffPL)
  

Спасибо всем, кто внес предложения.

Ответ №3:

Вот как вы могли бы сделать это на Python:

 listOfNumbers = [1,2,3]
averagesOfNumbers = [0,0,0]

# In Python, range function generates a range of numbers
# starting from 0 if number range is not provided.
# So, range(2) means 0 and 1 in total, that 
# is 2 numbers.

for i in range(2):
    averagesOfNumbers[i] = (listOfNumbers [i]   listOfNumbers[i   1])/2

print(averagesOfNumbers)
  

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

1. «2 означает 0,1,2» на самом деле range(2) означает от 0 до , но не включая 2. (только 0 и 1)

2. @Ayxan Спасибо за ваше исправление, я ничего не соображал должным образом. Я исправил это в своем ответе 🙂

Ответ №4:

Я предполагаю, что вы хотите сделать следующее:

 listOfNumbers = [1,2,3]
averagesOfNumbers = [0,0,0]

for i in range(len(listOfNumbers)-1):
    averagesOfNumbers[i] = (listOfNumbers[i]   listOfNumbers[i 1]) / 2
  

Ответ №5:

 list_of_numbers = [1, 2, 3] 
averages_of_numbers = [0, 0, 0]

for i in range(0, 2): # this will take indexes 0 and 1    
    averages_of_numbers[i] = (list_of_numbers[i]   list_of_numbers[i 1]) / 2

print(averages_of_numbers)
  

Ответ №6:

Самый простой способ здесь — использовать zip . Это позволяет избежать наличия индексов, которые вы на самом деле не используете:

 >>> numbers = [1,2,3]
>>> [sum(pair)/2 for pair in zip(numbers, numbers[1:])]
[1.5, 2.5]
  

Если вам действительно нужно иметь ноль в конце, вы можете просто добавить его вручную:

 numbers = [1,2,3]
avg = [sum(pair)/2 for pair in zip(numbers, numbers[1:])]
avg.append(0)
  

В некоторых случаях (например. вам нужен не список, а итератор) это может быть даже понятнее в использовании map :

 >>> map(lambda pair: sum(pair)/2, zip(numbers, numbers[1:]))
<map object ...>