Von jeder Zahl in einer Liste in Python einen Wert abziehen?

84

Ich habe eine Liste

 a = [49, 51, 53, 56]

Wie subtrahiere ich 13 von jedem ganzzahligen Wert in der Liste?

jaycodez
quelle

Antworten:

146

Mit einem Listenverständnis :

a = [x - 13 for x in a]
Ignacio Vazquez-Abrams
quelle
2
Indem Sie def minus13(a):die obige Zeile einfügen und eine Ebene einrücken.
Ignacio Vazquez-Abrams
8
Warum a[:]auf der lhs, anstatt nur zurück zuzuweisen a? Erstellt keine a[:]Kopie der Liste?
istruble
2
istruble: stackoverflow.com/questions/4081561/…
Ignacio Vazquez-Abrams
4
Was getan werden sollte, ist, dass der Wert aus dem Listenverständnis von der Funktion zurückgegeben wird und der Aufrufer beschließen sollte, die vorhandene Sequenz gegebenenfalls zu ersetzen.
Ignacio Vazquez-Abrams
1
@istruble: Nur direkt einem Willen zuzuweisen, funktioniert genauso gut. Das a = [x - 13 for x in a]wird genauso gut funktionieren und ist weniger verwirrend.
Lennart Regebro
71

Wenn Sie viel mit Zahlen arbeiten, sollten Sie sich NumPy ansehen . Sie können alle Arten von Operationen direkt an numerischen Arrays ausführen. Zum Beispiel:

>>> import numpy
>>> array = numpy.array([49, 51, 53, 56])
>>> array - 13
array([36, 38, 40, 43])
shang
quelle
1
Ich habe einen kurzen Test durchgeführt und es wird ein neues Array zurückgegeben, wobei das ursprüngliche Array unberührt bleibt.
Francois
10

Sie können die Funktion map () verwenden:

a = list(map(lambda x: x - 13, a))
sputnikus
quelle
7
@ Frost.baka In Python 3 gibt map ein Kartenobjekt zurück. In Python 2 wird die Liste zurückgegeben.
Sputnikus
5

Zur Klärung einer bereits veröffentlichten Lösung aufgrund von Fragen in den Kommentaren

import numpy

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

wird ausgegeben:

Array ([36, 38, 40, 43])

JJ K.
quelle
3

Das wird funktionieren:

for i in range(len(a)):
  a[i] -= 13
Oscar Mederos
quelle
4
Die Listenverständnislösung ist viel pythonischer. Sie könnten sie mögen. docs.python.org/tutorial/…
istruble
Wer hat meinen Kommentar gelöscht? - Ich sehe keinen Sinn darin, die Länge von a zu zählen. Eine einfache Berechnung durchführen.
Jaycodez
2
Die Zählung ist erforderlich, wenn der Algorithmus auf diese Weise ausgedrückt werden soll, damit eine Indexvariable ( i) alle möglichen Indexwerte durchläuft. Diese Indexvariable wird benötigt, um jedes Element in der Liste zu mutieren.
Santa