Как перебрать список, где точки данных зависят друг от друга? - PullRequest
0 голосов
/ 31 мая 2019

У меня есть список, a = [5, 4, 9, 3, 6, 6, 8, 2], и я по сути хочу суммировать первые три числа, и эта сумма будет первым значением в новомсписок.Следующим значением в новом списке будет сумма 4, 9 и 3 ... и т. Д.и т.д. Как это сделать в Python?

Ответы [ 4 ]

8 голосов
/ 31 мая 2019

list slicing хороший метод.

все, что вам нужно сделать, это перейти от начального индекса до конечного индекса-2 (может составить сумму из последних 3 элементов, и когда вы достигнете второго, последнего или последнего элемента, вы не сможете получить 3 элемента)

здесь вы можете взять 3 элемента и использовать нарезку списка, список срезов из текущий индекс до следующего 3 индекса, т.е. a[i:i+3], где [i,i+3) - диапазон. затем в этом новом списке выполните операцию sum и добавьте результат в окончательный список.

a = [5, 4, 9, 3, 6, 6, 8, 2]
res=[]
for i in range(len(a)-2):
    res.append(sum(a[i:i+3]))

print(res)

выход

[18, 16, 18, 15, 20, 16]
3 голосов
/ 31 мая 2019

Один лайнер:

list(map(sum, zip(a, a[1:], a[2:])))

Выход:

[18, 16, 18, 15, 20, 16]

Итак, вы создаете необходимые подсписки чисел, которые хотите добавить, а затем суммируете каждый подсписок, используя функцию старшего разряда map.

2 голосов
/ 31 мая 2019

Если я понял, что вы хотите:

b = [sum(a[i : i+3]) for i in range(0, len(a)-2)]
1 голос
/ 31 мая 2019

Перебирайте возможные индексы List, проверяя, чтобы убедиться, что index + 1 и index + 2 существуют, прежде чем пытаться получить к ним доступ. Сложите значения и добавьте их в новый список.

a = [5, 4, 9, 3, 6, 6, 8, 2]
b = []
for index in range(len(a)):
  result = a[index]
  if index + 1 < len(a):
    result += a[index + 1]
  if index + 2 < len(a):
    result += a[index + 2]
  b.append(result)
print(b)

Результат:

[18, 16, 18, 15, 20, 16, 10, 2]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...