Попытка увеличить Y в этом однострочном цикле - PullRequest
1 голос
/ 22 октября 2019

Мне нужно увеличить Y так, чтобы при добавлении Y к значениям в массиве оно добавляло 1, затем 2, а затем 3.

Попытка запустить цикл выше одной строки, но у меня возникли проблемы и дляпо какой-то причине добавление значений в список является для меня привередливым.

answer = [5,8,13,16]
y=0
new_arr = [y+x for x in answer]

Ожидаемый результат

new_arr = [5, 9, 15, 19]

Ответы [ 3 ]

2 голосов
/ 22 октября 2019

enumerate запускает индекс вместе со значениями итерации:

answer = [5,8,13,16]
new_arr = [y+x for y, x in enumerate(answer)]

Вывод:

[5, 9, 15, 19]
1 голос
/ 22 октября 2019

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

from itertools import count
answer = [5,8,13,16]
y=count(0)
new = [x + next(y) for x in answer]
print(new)

ВЫХОД

[5, 9, 15, 19]
1 голос
/ 22 октября 2019

Вместо того, чтобы пытаться сделать y обычным числом, попробуйте сделать его списком со значениями [0, 1, 2, 3...] и добавить его в исходный список.

Следующий код должен делать то, что вы хотите:

# The input
x = [5,8,13,16]

# An array containing [0, 1, 2, 3, ... len(x) - 1 ] with the exact size of the input
y = range(len(x))

# Iterate on both arrays, adding entries one by one
answer = [(z[0] + z[1]) for z in zip(x, y)]

print(answer)

Вывод:

[5, 9, 15, 19]

В качестве бонуса для этого решения с numpy и np.arrange вы получите действительно читабельныйкод, понятный большинству программистов на Python:

import numpy as np

x = [5,8,13,16]
y = np.arange(len(x))
answer = x + y

print(answer)

Вывод:

[5 9 15 19]
...