Відняти значення з кожного числа у списку на Python?


84

У мене є список

 a = [49, 51, 53, 56]

Як мені відняти 13 з кожного цілого числа у списку?

Відповіді:


146

З розумінням списку :

a = [x - 13 for x in a]

2
Поставивши def minus13(a):рядок вище та відступивши на один рівень.
Ігнасіо Васкес-Абрамс

8
Чому a[:]на lhs, а не просто призначати назад a? Не a[:]створює копію списку?
каструба


4
Що слід зробити, це те, що значення із розуміння списку має повернути функція, і викликучий повинен вирішити замінити існуючу послідовність, якщо це доречно.
Ігнасіо Васкес-Абрамс

1
@istruble: Просто присвоєння безпосередньо заповіту буде працювати так само добре. Так a = [x - 13 for x in a]буде працювати так само добре, і менш заплутано.
Леннарт Регебро

71

Якщо ви багато працюєте з числами, можливо, ви захочете поглянути на NumPy . Це дозволяє виконувати всі види операцій безпосередньо на числових масивах. Наприклад:

>>> import numpy
>>> array = numpy.array([49, 51, 53, 56])
>>> array - 13
array([36, 38, 40, 43])

1
Я зробив швидкий тест, і він повертає новий масив, залишаючи вихідний масив недоторканим.
Франсуа

10

Ви можете використовувати функцію map () :

a = list(map(lambda x: x - 13, a))

7
@ Frost.baka У Python 3 карта повертає об'єкт карти. У Python 2 він повертає список.
sputnikus

5

Щоб пояснити вже розміщене рішення через запитання в коментарях

import numpy

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

виведе:

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


3

Це буде працювати:

for i in range(len(a)):
  a[i] -= 13

4
Рішення для розуміння списку набагато пітонічніше. Вони можуть вам сподобатися. docs.python.org/tutorial/…
кадрування

Хто видалив мій коментар? - Я не бачу сенсу рахувати довжину a. Зробити простий розрахунок.
jaycodez

2
Якщо алгоритм потрібно виразити таким чином, підрахунок необхідний для того, щоб змінна індексу ( i) перебирала всі можливі значення індексу. Ця змінна індексу потрібна для мутації кожного елемента у списку.
Санта
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.