61

Here I go with my basic questions again, but please bear with me.

In Matlab, is fairly simple to add a number to elements in a list:

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

b then is [2,2,2,2,2]

In python this doesn't seem to work, at least on a list.

Is there a simple fast way to add up a single number to the entire list.

Thanks

joaquin
  • 82,968
  • 29
  • 138
  • 152
Leon palafox
  • 2,675
  • 6
  • 27
  • 35

5 Answers5

85

if you want to operate with list of numbers it is better to use NumPy arrays:

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

gives

[3, 3, 3, 3, 3]
AneesAhmed777
  • 2,475
  • 2
  • 13
  • 18
joaquin
  • 82,968
  • 29
  • 138
  • 152
32

using List Comprehension:

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

which roughly translates to using a for loop:

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

or using map:

>>> map(lambda x:x+1, L)
[2, 2, 2, 2, 2]
>>> 
dting
  • 38,604
  • 10
  • 95
  • 114
5

You can also use map:

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

It gives:

[2, 2, 2, 2, 2]
Enrique Pérez Herrero
  • 3,699
  • 2
  • 32
  • 33
2

try this. (I modified the example on the purpose of making it non trivial)

import operator
import numpy as np

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

operator.add is almost more than two times faster

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

than adding with numpy

%timeit an+1
Nikolai Zaitsev
  • 303
  • 5
  • 9
0

If you don't want list comprehensions:

a = [1,1,1,1,1]
b = []
for i in a:
    b.append(i+1)
PrettyPrincessKitty FS
  • 6,117
  • 5
  • 36
  • 51