Подтвердить что ты не робот

Измените значение каждого N-го элемента в списке

Какой самый питонический способ выполнения арифметической операции для каждого n-го значения в списке? Например, если я начинаю со списка1:

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Я хотел бы добавить 1 к каждому второму элементу, который дал бы:

list2 = [1, 3, 3, 5, 5, 7, 7, 9, 9, 11]

Я пробовал:

list1[::2]+1

а также:

for x in list1:
    x=2        
    list2 = list1[::x] + 1
4b9b3361

Ответ 1

Вы можете использовать slicing с пониманием списка следующим образом:

In [26]: list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

In [27]: list1[1::2] = [x+1 for x in list1[1::2]]

In [28]: list1
Out[28]: [1, 3, 3, 5, 5, 7, 7, 9, 9, 11]

Ответ 2

numpy позволяет использовать операцию += со срезами:

In [15]: import numpy as np

In [16]: l = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

In [17]: l[1::2] += 1

In [18]: l
Out[18]: array([ 1,  3,  3,  5,  5,  7,  7,  9,  9, 11])

Ответ 3

Используйте enumerate и понимание списка

>>> list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> [v+1 if i%2!=0 else v for i,v in enumerate(list1)]
[1, 3, 3, 5, 5, 7, 7, 9, 9, 11]

Ответ 4

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in range(1, len(list1), 2):
    list1[i] +=1
print(list1)

Использование i% 2 кажется не очень эффективным

Ответ 5

Попробуйте следующее:

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in range(1,len(list1),2):
    list1[i] += 1

Ответ 6

Вы можете создать итератор, представляющий delta (itertools.cycle([0, 1]), а затем добавить его элементы в существующий список.

>>> list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> [a + b for a,b in zip(list1, itertools.cycle([0,1]))]
[1, 3, 3, 5, 5, 7, 7, 9, 9, 11]
>>>

Ответ 7

a = [i for i in range(1,11)] 
#a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = [a[i]+1 if i%2==1 else a[i] for i in range(len(a))] 
#b = [1, 3, 3, 5, 5, 7, 7, 9, 9, 11]