将整数的列表添加到另一个列表中的列表中。

3
我有一个列表 x = [[2873, 5321, 5421], [2788, 5171, 5271], [2788, 5171, 5271]]。 我想要将y=400添加到列表中的每个元素上。 输出应该是 z = [[3273, 5721, 5821], [3188, 5571, 5671], [3188, 5571, 5671]] 我尝试使用以下代码:
def add(x,y): 
addlists=[(x[i] + y) for i in range(len(x))]    
return addlists
z = add(x,y) 

但是那并没有奏效。

我还尝试过

def add(x,y):
addlists = [(x[i] + [y]) for i in range(len(x))]
    return addlists
z = add(x,y) 

但这会返回z = [[2873, 5321, 5421] + 400, [2788, 5171, 5271] + 400, [2788, 5171, 5271]+ 400]

2个回答

2
作为另一种方法,如果你想要使用numpy,可以使用以下方法。
根据数据集的大小,与使用嵌套循环相比,此方法可能提供一些效率收益,因为numpy采用一种称为'广播'的方法将给定操作应用于数组中的每个值,而不是“传统循环”。
此外,这种方法具有良好的可扩展性,因为它适应列表的形状。
例如:
import numpy as np

x = [[2873, 5321, 5421], [2788, 5171, 5271], [2788, 5171, 5271]]
a = np.array(x)

a + 400

输出:

array([[3273, 5721, 5821],
       [3188, 5571, 5671],
       [3188, 5571, 5671]])

更新:

此更新解决了以下评论问题:

... 是否可以仅向数组中每个列表的最后2个元素添加 ...

是的,绝对可以 - 使用切片。这里是一个简单切片教程的链接。

例如:

a[:,-2:] += 400

输出:

array([[2873, 5721, 5821],
       [2788, 5571, 5671],
       [2788, 5571, 5671]])

解释:
a[:,-2:] += 400
^ ^  ^    ^
| |  |    |
| |  |    \ Apply the addition in place.
| |  |
| |  \ Apply the addition to only the last 2 elements.
| |
| \ Apply the addition to all arrays.
|
\ Array to be sliced

谢谢你的好回答,但是是否可能只向数组中每个列表的最后两个元素添加内容。例如,将400添加到列表[[x,y,z],[a,b,c]]中的y、z、b和c? :) - abh
@abh - 非常好,我很高兴。刚刚更新了问题,以回答您关于最后两个元素的问题。 - S3DEV

0

试试这个:

x = [[2873, 5321, 5421], [2788, 5171, 5271], [2788, 5171, 5271]]

y = 400

z = [[y + each for each in eachlist] for eachlist in x]
print (z)
# result: 
[[3273, 5721, 5821], [3188, 5571, 5671], [3188, 5571, 5671]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接