web-dev-qa-db-ja.com

Pythonのリスト(または配列)のすべての要素に1つの数値を合計します

ここで基本的な質問に戻りますが、ご容赦ください。

Matlabでは、リストの要素に数字を追加するのは非常に簡単です:

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

b[2,2,2,2,2]

pythonこれは、少なくともリスト上では動作しないようです。

リスト全体に単一の数値を加算する簡単で高速な方法はありますか。

ありがとう

35
Leon palafox

数値のリストを操作する場合は、NumPy配列を使用することをお勧めします。

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

与える

[3, 3, 3, 3, 3]
55
joaquin

リスト内包表記の使用:

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

おおよそforループを使用することに変換されます。

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

またはマップを使用して:

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

マップを使用することもできます:

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

それは与えます:

[2, 2, 2, 2, 2]

リストを理解したくない場合:

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

これを試して。 (私はそれを非自明にするために例を修正しました)

import operator
import numpy as np

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

operator.addはほぼ2倍以上高速です

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

numpyで追加するより

%timeit an+1
0
Nikolai Zaitsev