Вычесть значение из каждого числа в списке в Python?

у меня есть список

 a = [49, 51, 53, 56]

Как вычесть 13 из каждого целочисленного значения в списке?


person jaycodez    schedule 07.02.2011    source источник


Ответы (5)


С пониманием списка:

a = [x - 13 for x in a]
person Ignacio Vazquez-Abrams    schedule 07.02.2011
comment
Спасибо, хорошая работа. :) Как быстро поместить это в функцию? - person jaycodez; 07.02.2011
comment
Поставив def minus13(a): на строку выше и сделав отступ на один уровень. - person Ignacio Vazquez-Abrams; 07.02.2011
comment
Почему a[:] слева вместо того, чтобы просто вернуть a? Разве a[:] не создает копию списка? - person istruble; 07.02.2011
comment
istruble: stackoverflow.com/questions/4081561/ - person Ignacio Vazquez-Abrams; 07.02.2011
comment
Что следует сделать, так это то, что значение из понимания списка должно быть возвращено функцией, и вызывающая сторона должна решить заменить существующую последовательность, если это необходимо. - person Ignacio Vazquez-Abrams; 07.02.2011
comment
ИВА: Спасибо. Это то, о чем я догадывался, но я не нашел многого на docs.python.org с моими первоначальными поисками. Это просто казалось возможной ранней оптимизацией ;) Джош: Я писал тот же ответ, но только с a слева. - person istruble; 07.02.2011
comment
minus13() — это функция, которую вы определяете в своем коде, которая возвращает результат понимания списка. Остальное — это создание списка и вызов функции, которая происходит в другом месте вашего кода. - person Ignacio Vazquez-Abrams; 07.02.2011
comment
@istruble: Простое назначение непосредственно на будет работать так же хорошо. Таким образом, a = [x - 13 for x in a] будет работать так же хорошо и менее запутанно. - person Lennart Regebro; 07.02.2011
comment
@Lennart: Если только не существуют другие ссылки на список, и вы хотите, чтобы они содержали измененные значения. - person Ignacio Vazquez-Abrams; 07.02.2011
comment
@Ignacio: Верно, но это не было в вопросе, и, по моему опыту, это не очень распространенный вариант использования. Может быть, это зависит от твоего стиля, но я никогда к этому не отношусь. - person Lennart Regebro; 07.02.2011

Если вы много работаете с числами, обратите внимание на NumPy. Он позволяет выполнять все виды операций непосредственно с числовыми массивами. Например:

>>> import numpy
>>> array = numpy.array([49, 51, 53, 56])
>>> array - 13
array([36, 38, 40, 43])
person shang    schedule 07.02.2011
comment
Я сделал быстрый тест, и он возвращает новый массив, оставляя исходный массив нетронутым. - person Francois; 09.06.2018

Вы можете использовать функцию map():

a = list(map(lambda x: x - 13, a))
person sputnikus    schedule 07.02.2011
comment
@Frost.baka В Python 3 карта возвращает объект карты. В Python 2 он возвращает список. - person sputnikus; 07.02.2011

Уточнить уже опубликованное решение из-за вопросов в комментариях

import numpy

array = numpy.array([49, 51, 53, 56])
array = array - 13

выведет:

массив([36, 38, 40, 43])

person JJ K.    schedule 08.11.2019

Это будет работать:

for i in range(len(a)):
  a[i] -= 13
person Oscar Mederos    schedule 07.02.2011
comment
Решение для понимания списка гораздо более питонично. Они могут вам понравиться. docs.python.org/tutorial/ - person istruble; 07.02.2011
comment
Кто удалил мой комментарий? - Не вижу смысла считать длину a. Чтобы сделать простой расчет. - person jaycodez; 07.02.2011
comment
Счетчик необходим, если алгоритм должен быть выражен таким образом, чтобы переменная индекса (i) перебирала все возможные значения индекса. Эта индексная переменная необходима для изменения каждого элемента в списке. - person Santa; 07.02.2011
comment
Использование range и len вместе в python почти всегда является запахом кода, всегда есть лучший способ сделать что-то, как в многочисленных примерах, приведенных выше. - person Mark Lawrence; 20.02.2021