Python - 从2D列表中乘以元素

时间:2016-10-25 22:33:14

标签: python multidimensional-array multiplication

我想将2D列表中的一个元素乘以整数。但是,一旦我执行代码,我得到以下内容:我期望结果只是一个元组,而不是一个列表,并希望它是一个元组而不是列表。

[3, 3, 3]
[6, 6, 3, 3, 3, 3]

这是我的代码:

list = [[0.5],[0.3],[0.1]]

def funcOne(juv):    
    newAd = juv * list[0]
    return newAd

def funcTwo(ad,sen):
    newSen = (ad* list[1]) + (sen* list[2])
    return newSen

print(funcOne(3))
print(funcTwo(2,4))

我想要的funcOne输出是3 * 0.5 = 1.5 ,其中" 0.5"是列表[0]。我不确定如何编辑我的代码以实现这一结果。

2 个答案:

答案 0 :(得分:2)

实际上,我仍然对你对预期输出的解释感到困惑。我只是运行你的代码输出如下:

[0.5, 0.5, 0.5]
[0.3, 0.3, 0.1, 0.1, 0.1, 0.1]

你的函数返回列表而不是乘以2d矩阵中的一个元素的原因是你以错误的方式使用2d矩阵中元素的索引。 这是你的代码:

list = [[0.5],[0.3],[0.1]]

def funcOne(juv):    
    newAd = juv * list[0]
    return newAd

def funcTwo(ad,sen):
    newSen = (ad* list[1]) + (sen* list[2])
    return newSen

print(funcOne(3))
print(funcTwo(2,4))

在您的代码中,当您在函数juv * list[0]中使用funcOne时,它实际执行为3 * [0.5],其中[0.5]是第二个矩阵的第一个元素(列表)。您可以在Python解释器中运行,并发现3 * [0.5]的结果是[0.5, 0.5, 0.5],这意味着它只是复制列表中的元素三次。

如果您想计算[[0.5 * 3], [0.3], [0.1]],请更改以下代码:

def funcOne(juv):    
    newAd = juv * list[0][0]
    return newAd

def funcTwo(ad,sen):
    newSen = (ad* list[1][0]) + (sen* list[2][0])
    return newSen

----------更新

如果您想返回[[1.5], [0.3], [0.1]]之类的列表。将代码更改为

def funcOne(juv):    
    list[0][0] = juv * list[0][0]
    return list

希望它有所帮助。

答案 1 :(得分:0)

只需将list转换为tuple

即可
def funcOne(juv):    
    newAd = juv * list[0]
    return tuple(newAd) # convert to tuple

同样适用于funcTwo

然后,要重现您想要的输出用途:

>>> list = [[3], [6], [3]]
>>> print(funcOne(3))
(3, 3, 3)
>>> print(funcTwo(2, 4))
(6, 6, 3, 3, 3, 3)