Как добавить список в Python для определенного индекса? - PullRequest
2 голосов
/ 07 января 2020

У меня есть список, подобный этому;

list1 = [1, 1, 1, 1, 1, 1, 1, 1, 1] # list of 9 elements

Я хочу иметь еще один list2, как этот ..

list2 = [1, 2, 2, 2, 2, 2, 2, 2, 2, 1] # list of 10 elements

list2 формируется путем сохранения 0th element & 8th element из list1 и добавление соседних элементов рядом друг с другом в list1. Это то, что я сделал;

list2 = [None] * 10
list2[0] = list2[9] = 1

for idx, i in enumerate(list1):
    try:
        add = list1[idx] + list1[idx+1]
        #print(add) 
        list2[1:9].append(add)
    except:
        pass

print(list2)

Но я не получаю желаемый результат ... на самом деле list2 не обновляется, я получаю:

[1, None, None, None, None, None, None, None, None, 1]

Ответы [ 3 ]

4 голосов
/ 07 января 2020

Альтернативным способом достижения желаемого результата является эффективное смещение list1, добавляя к нему список с одной записью 0, а затем добавляя его к себе (расширенному вводом 0 для сопоставления длин), используя zip для создания списка кортежей, которые можно повторять:

list1 = [1, 1, 1, 1, 1, 1, 1, 1, 1]

list2 = [x + y for x, y in zip([0] + list1, list1 + [0])]
print(list2)

Вывод

[1, 2, 2, 2, 2, 2, 2, 2, 2, 1]
2 голосов
/ 07 января 2020

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

list1 = [1, 1, 1, 1, 1, 1, 1, 1, 1]

lyst = [0, *list1, 0]
list2 = [prev + cur for prev, cur in zip(lyst, lyst[1:])]

print(list2)
1 голос
/ 07 января 2020

Как насчет чего-то вроде:

list2 = list1[:1] + [x + y for x, y in zip(list1[0:], list1[1:])] + list1[-1:]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...