将列表的列表与列表的列表相乘

4

有人知道如何将列表的列表乘以列表的列表吗?

[[0], [0], [12, 8, 0]] 乘以 [[1], [10], [1, 100, 1]]

期望结果: [[0],[0], [12,800, 0]].

每次尝试时,我总是得到以下错误:

TypeError: can't multiply sequence by non-int of type 'list.

4个回答

3
lst1 = [[0], [1,2]]
lst2 = [[1], [2,2]]
r = [a*b for x,y in zip(lst1,lst2) for a,b in zip(x,y)]

print r

输出:

[0, 2, 4]

在这个例子中,它能够工作是因为 lst1lst2 有相同数量的子列表,且每个子列表也具有相同数量的整数项。

1
能否保留列表的列表形式?在您的示例中,是否可以获得输出:[[0],[2,4]]? - Kubix
2
是的:r = [[a*b for a,b in zip(x,y)] for x,y in zip(lst1,lst2)] - DevLounge

1
另一种方式,
>>> l1 = [[0], [0], [12, 8, 0]]
>>> l2 = [[1], [10], [1, 100, 1]]
>>> [ ix * l2[k1][k2] for k1, item in enumerate(l1) for k2,ix in enumerate(item) ]
[0, 0, 12, 800, 0]

1
列表推导式很棒,但对于自称初学者的人来说可能会有些困惑。
这种方法(几乎)等同于Adem Oztas的答案,只是嵌套的列表结构被保留了。
def func(L1,L2):
    result=[]
    for xi,x in enumerate(L1):
        result.append([])
        for yi,y in enumerate(x):
            result[xi].append(y*L2[xi][yi])
    return result

print(func())

列表推导式版本:

[[y*L2[xi][yi] for yi,y in enumerate(x)] for xi,x in enumerate(L1) ]

这将保留输入的嵌套列表结构:
[[0],[0],[12,800,0]]

以下是与Apero的答案相同的内容:

[[a*b for a,b in zip(x,y)] for x,y in zip(lst1,lst2)]

"...会是这样的方式:"
def func(L1,L2):
    result=[]
    for x,y in zip(L1,L2):
        r = []
        result.append(r)
        for a,b in zip(x,y):        
            r.append(a*b)
    return result

print(func())

这两个答案(使用列表推导式)比我上面使用循环的方法更好,因为这正是列表推导式被创建的原因。但是看到另一种方式做可以帮助理解。


0
 List<List<Integer>> output = new ArrayList<List<Integer>>();

    for(int i = 0;i<lis1.size();i++){
        List<Integer> subOutPut = new ArrayList<Integer>();
        for(int j = 0;j<lis1.get(i).size();j++){
            subOutPut.add(lis1.get(i).get(j)*lis2.get(i).get(j));
        }
        output.add(subOutPut);
    }

在Java中,您可以像上面那样实现

输入:[[0],[0],[12, 8, 0]] * [[0],[0],[12, 8, 0]]

输出:[[0],[0],[12, 800, 0]]


Pravin,感谢您的回复,但由于我是Python的初学者,我很难理解它,也不知道哪些部分可以在我的代码中使用。那些用于字典的括号是否也是必需的? - Kubix
2
这不是Python代码。您需要标记您感兴趣的语言来提问。否则,您将得到许多语言或伪代码的答案(这并不是真正的坏事,只取决于您想要什么)。 - Rick

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