Как добавить соседние номера в список? Я не могу получить последнюю переменную - PullRequest
1 голос
/ 19 апреля 2020

Let x = [3, 8, -2, 6, 9, -4, 7, 1, -5, 8]

Используйте a для l oop, чтобы добавить соседние элементы в x.
Сохранить каждый из этих результатов в векторе, sa.
Показать оба вектор х и вектор sa. Например, первые 3 числа sa будут:

sa = [11, 9, 12, …]  = [(3+8), (3+8+(-2)), (8+(-2)+6), …] 

У меня есть что-то вроде этого ...

x = [3, 8, -2, 6, 9, -4, 7, 1, -5, 8]
sa = []

for i in range (0, len(x)-1):
    if i<1:
        sa.append(x[0] + x[1])
    elif i >= 1 & i< len(x):
        sa.append(x[i-1] + x[i] + x[i+1])
    if i == 0:
        sa.append(x[i] + x[i+1])
print("Here is sa", sa) 

, но я не могу получить последнюю переменную -5 +8 появиться, пожалуйста, помогите, что я получу в итоге Вот sa, [11, 11, 9, 12, 13, 11, 12, 4, 3, 4] но мне также нужно последнее значение, которое должно быть (-5 + 8) = 3, поэтому итоговый окончательный ответ должен включать три как

[11, 11, 9, 12, 13, 11, 12, 4, 3, 4, 3]

или даже

[11, 9, 12, 13, 11, 12, 4, 3, 4, 3]

Ответы [ 4 ]

2 голосов
/ 19 апреля 2020

Вы можете написать это как понимание списка, отметив, что i th элемент в sa является sum из x значений от x[i-1] до x[i+1]. Теперь эти индексы могут выходить за границы x, поэтому нам нужно использовать max и min, чтобы держать их в диапазоне:

x = [3, 8, -2, 6, 9, -4, 7, 1, -5, 8]

sa = [sum(x[max(i-1, 0):min(i+2, len(x))]) for i in range(len(x))]
print(sa)

Вывод:

[11, 9, 12, 13, 11, 12, 4, 3, 4, 3]
1 голос
/ 19 апреля 2020

На всякий случай, если вы ищете не всеобъемлющий способ, вот он.

for i in range(len(x)):
    if i == 0:
        sa.append(x[i] + x[i+1])
    elif 1 <= i < len(x)-1:
        sa.append(x[i-1] + x[i] + x[i+1])
    else:
        sa.append(x[i] + x[i-1])

print("Here is sa", sa)

Вывод:

Here is sa [11, 9, 12, 13, 11, 12, 4, 3, 4, 3]
0 голосов
/ 19 апреля 2020
>>> x = [3, 8, -2, 6, 9, -4, 7, 1, -5, 8]

Создать список с суммой первых двух элементов,

>>> q = [sum(x[:2])]

Перебирать список по три за один раз и добавлять суммы.

>>> for thing in zip(x,x[1:],x[2:]):
...     q.append(sum(thing))

Добавить сумма двух последних предметов.

>>> q.append(sum(x[-2:]))

>>> q
[11, 9, 12, 13, 11, 12, 4, 3, 4, 3]
0 голосов
/ 19 апреля 2020

Ваш код содержит несколько ошибок:

x = [3, 8, -2, 6, 9, -4, 7, 1, -5, 8]
sa = []

# the last element of the loop will be x[len(x)-2], it is -5 in this case
# -5 is the last element this loop process, it adds up 1, -5 and 8
# this loop will not take 8 as the central number, so the results miss the last value
for i in range (0, len(x)-1):
    if i<1:
        sa.append(x[0] + x[1])
    # in python, it is `and` not &, & is bitwise and.
    elif i >= 1 & i< len(x):
        sa.append(x[i-1] + x[i] + x[i+1])
    if i == 0: # this is meaningless, i == 0 is covered in the first if branch
        sa.append(x[i] + x[i+1])
print("Here is sa", sa)

Исправьте ваш код:

x = [3, 8, -2, 6, 9, -4, 7, 1, -5, 8]
sa = []

# fix one: loop to the last element
for i in range (0, len(x)):
    if i<1:
        sa.append(x[0] + x[1])
    # fix two: do not include the last element in this elif branch
    elif i >= 1 and i < len(x) - 1:
        sa.append(x[i-1] + x[i] + x[i+1])
    # fix three: process the last element.
    else:
        sa.append(x[i - 1] + x[i])
print("Here is sa", sa)

Вывод:

Here is sa [11, 9, 12, 13, 11, 12, 4, 3, 4, 3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...