リストの各要素に整数を追加するにはどうすればよいですか?


135

私が持っていて、出力を取得list=[1,2,3]する1ために各要素に追加したい場合[2,3,4]、どうすればいいですか?

forループを使用すると思いますが、正確な方法はわかりません。

回答:


157
new_list = [x+1 for x in my_list]

6
この講演ではそれについて説明します:Pythonの名前と値に関する事実と神話:nedbatchelder.com/text/names1.html
Ned Batchelder

√素晴らしい情報。アイ開口。
ダニエルスプリンガー

3
@DaniSpringerリストに割り当てていないため。と同じlst = [1, 2, 3]; e = lst[0]; e += 1です。eそれがどこから来たのかについての情報はありません。それは、リストの要素が割り当てられた単なる変数です。何か他のものを割り当てた後、リストlstは変更されません。
BłażejMichalik

さて、この答えは私によく似ています。
ダニエルスプリンガー

特派員の遅延計算1:new_list = (x+1 for x in my_list)
Eduardo Pignatelli '14


24

リスト内包表記に関する他の答えは、おそらく単純な追加に最適ですが、すべての要素に適用する必要があるより複雑な関数がある場合は、mapが適している可能性があります。

あなたの例では次のようになります:

>>> map(lambda x:x+1, [1,2,3])
[2,3,4]

7
map(1 .__add__, ...)も動作します。あなたが間にスペースが必要であることを注意1し、.それがフロートで考えパーサを防ぐために
ジョン・ラRooy

15

numpyを使用したい場合は、次のような別の方法があります

import numpy as np
list1 = [1,2,3]
list1 = list(np.asarray(list1) + 1)

13

編集:これはインプレースではありません

まず、変数に「リスト」という単語を使用しないでください。キーワードを隠すlist

最良の方法は、スプライシングを使用して所定の場所で行うことです[:]

>>> _list=[1,2,3]
>>> _list[:]=[i+1 for i in _list]
>>> _list
[2, 3, 4]

4
これは既存のリストを変更するのに適していますが、それでも新しいリストが作成されます。不要なリストの作成を回避するためにジェネレータを使用することは、どういうわけか安全ではありませんか?すなわち、_list[:]=(i+1 for i in _list)
アラン

それでも新しいリストが作成されますが、forループなしではインプレースで実行できません
robert king

なぜ_list[:]=(i+1 for i in _list)新しいリストを作成すると思いますか?
アラン

つまり、準備は整っていますが、一時的にrhsのまったく新しいリストが作成されます。これらの回答を参照してください。stackoverflow.com/questions/4948293/... stackoverflow.com/questions/11877212/...
ロバート・キング

どういう意味かわかります。一時的なシーケンスをリストと呼んで混乱しました。実際にそのタイプについて何か知っていますか?それは実装固有ではないでしょうか?
アラン

9
>>> [x.__add__(1) for x in [1, 3, 5]]
3: [2, 4, 6]

ここでの私の意図は、リストの項目が整数である場合に、さまざまな組み込み関数をサポートすることを公開することです。


7

Python 2+:

>>> mylist = [1,2,3]
>>> map(lambda x: x + 1, mylist)
[2, 3, 4]

Python 3以降:

>>> mylist = [1,2,3]
>>> list(map(lambda x: x + 1, mylist))
[2, 3, 4]


2

それほど効率的ではありませんが、それを行うユニークな方法に出くわしました。したがって、それを共有します。そして、はい、別のリストのために追加のスペースが必要です。

from operator import add
test_list1 = [4, 5, 6, 2, 10]
test_list2 = [1] * len(test_list1)

res_list = list(map(add, test_list1, test_list2))

print(test_list1)
print(test_list2)
print(res_list)

#### Output ####
[4, 5, 6, 2, 10]
[1, 1, 1, 1, 1]
[5, 6, 7, 3, 11]

「追加」はどこから来るのですか?
ハーネック

addはオペレーターからインポートする必要がありますfrom operator import add
Rajith Thennakoon


0

上記の答えの多くは非常に良いです。私はまた、仕事をするいくつかの奇妙な答えを見てきました。また、見られた最後の答えは通常のループを介してでした。答えを出そうとするこの意欲は、私をitertoolsnumpyに導きます。

ここでは、上記の答えではなく、仕事をするためのさまざまな方法を紹介します。

import operator
import itertools

x = [3, 5, 6, 7]

integer = 89

"""
Want more vairaint can also use zip_longest from itertools instead just zip
"""
#lazy eval
a = itertools.starmap(operator.add, zip(x, [89] * len(x))) # this is not subscriptable but iterable
print(a)
for i in a:
  print(i, end = ",")


# prepared list
a = list(itertools.starmap(operator.add, zip(x, [89] * len(x)))) # this returns list
print(a)



# With numpy (before this, install numpy if not present with `pip install numpy`)
import numpy

res = numpy.ones(len(x), dtype=int) * integer + x # it returns numpy array
res = numpy.array(x) + integer # you can also use this, infact there are many ways to play around
print(res)
print(res.shape) # prints structure of array, i.e. shape

# if you specifically want a list, then use tolist

res_list = res.tolist()
print(res_list)

出力

>>> <itertools.starmap object at 0x0000028793490AF0> # output by lazy val
>>> 92,94,95,96,                                     # output of iterating above starmap object
>>> [92, 94, 95, 96]                                 # output obtained by casting to list
>>>                   __
>>> # |\ | |  | |\/| |__| \ /
>>> # | \| |__| |  | |     |
>>> [92 94 95 96]                                    # this is numpy.ndarray object
>>> (4,)                                             # shape of array
>>> [92, 94, 95, 96]                                 # this is a list object (doesn't have a shape)

私の唯一の使用を強調する理由はnumpy、それは非常に大きな配列のための効率的なパフォーマンスであるため、1が常にnumpyのようなライブラリとそのような操作を行うべきであるということです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.