web-dev-qa-db-fra.com

Somme d'un nombre pour chaque élément d'une liste (ou tableau) en Python

Je reviens ici avec mes questions de base, mais je vous en prie, supportez-moi.

Dans Matlab, il est assez simple d’ajouter un numéro aux éléments d’une liste:

a = [1,1,1,1,1]
b = a + 1

b est alors [2,2,2,2,2]

En python, cela ne semble pas fonctionner, du moins sur une liste.

Existe-t-il un moyen simple et rapide d’ajouter un seul numéro à la liste entière?.

Merci

29
Leon palafox

si vous voulez utiliser une liste de nombres, utilisez de préférence des tableaux NumPy:

import numpy
a = [1, 1, 1 ,1, 1]
ar = numpy.array(a)
print ar + 2

donne

[3, 3, 3, 3, 3]
47
joaquin

en utilisant la compréhension de liste:

>>> L = [1]*5
>>> [x+1 for x in L]
[2, 2, 2, 2, 2]
>>> 

ce qui se traduit approximativement par l'utilisation d'une boucle for:

>>> newL = []
>>> for x in L:
...     newL+=[x+1]
... 
>>> newL
[2, 2, 2, 2, 2]

ou en utilisant la carte:

>>> map(lambda x:x+1, L)
[2, 2, 2, 2, 2]
>>> 
21
DTing

Si vous ne voulez pas de compréhension de liste: 

a = [1,1,1,1,1]
b = []
for i in a:
    b.append(i+1)
1
The Communist Duck

essaye ça. (J'ai modifié l'exemple dans le but de le rendre non trivial)

import operator
import numpy as np

n=10
a = list(range(n))
a1 = [1]*len(a)
an = np.array(a)

operator.add est presque plus de deux fois plus rapide

%timeit map(operator.add, a, a1)

que d'ajouter avec numpy

%timeit an+1
0
Nikolai Zaitsev

Vous pouvez également utiliser la carte:

a = [1, 1, 1, 1, 1]
b = 1
list(map(lambda x: x + b, a))

Il donne:

[2, 2, 2, 2, 2]
0