如何向列表中的每个元素添加一个整数?

如果我有 list=[1,2,3]并且我想向每个元素添加 1以得到输出 [2,3,4], 我该怎么做?

我假设我将使用 for 循环,但不确定具体如何使用。

375417 次浏览
new_list = [x+1 for x in my_list]
>>> mylist = [1,2,3]
>>> [x+1 for x in mylist]
[2, 3, 4]
>>>

列表-理解 python

关于列表内涵的其他答案可能是简单加法的最佳选择,但如果你有一个更复杂的函数,你需要应用到所有的元素,那么 地图可能是一个很好的选择。

在你的例子中,应该是:

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

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]

编辑: 这不是在地方

首先,不要为你的变量使用“列表”这个词。它隐藏了关键字 list

最好的方法是使用拼接,注意 [:]表示一个拼接:

>>> _list=[1,2,3]
>>> _list[:]=[i+1 for i in _list]
>>> _list
[2, 3, 4]
>>> [x.__add__(1) for x in [1, 3, 5]]
3: [2, 4, 6]

我在这里的目的是公开列表中的项是否是一个整数,它是否支持各种内置函数。

如果要使用 numpy,还有另一个方法,如下所示

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


for index in range(len(list)):
list[index] = list[index] +1


print(list)

遇到了一个不是很有效率,但是很独特的方法。所以我们一起分享。是的,它需要额外的空间为另一个列表。

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]

上面的许多答案都很好。我也见过一些奇怪的答案,可以解决这个问题。而且,最后看到的答案是通过一个正常的循环。这种给出答案的意愿将我引向 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的原因是,应该始终使用 numpy 这样的库进行这样的操作,因为对于非常大的数组来说,这样做是有效的。

import numpy as np


np.add([1, 2, 3], 1).tolist()

所以

[2, 3, 4]

以防有人在寻找一种只使用内置而不使用 lambda的解决方案:

from functools import partial
from operator import add




my_list = range(1, 4)  # list(my_list) #=> [1, 2, 3]
my_list_plus_one = list(map(partial(add, 1), my_list)  #=> [2, 3, 4]