【发布时间】:2015-08-02 13:00:15
【问题描述】:
我正在尝试将第一个列表的第一个数字 1 与第二个列表的第二个数字 5 相乘,以此类推,得到一个列表列表。例如,对于 [[1, 2, 3], [4, 5, 6], [7, 8, 9]],我想得到 1*5*9。
虽然有很多可能的方法可以做到这一点,但我想知道 reduce 如何处理枚举:
def test(m):
return reduce(lambda a, b: a[1][a[0]]*b[1][b[0]], enumerate(m))
print test([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
我会认为开头的a是(0, [1,2,3]),所以a[1]是[1,2,3],a[0]是0,所以a[1][a[0]] 为 1。
但是,我得到以下异常:
return reduce(lambda a, b: a[1][a[0]]*b[1][b[0]], enumerate(mat))
TypeError: 'int' object has no attribute '__getitem__'
为什么a 是整数?
【问题讨论】:
-
完全不确定你要做什么——枚举一个列表会给你索引和值(如果你想对索引做一些事情)。否则无需“枚举”。所以我想这有问题。因此,根据您的输入-绝对不清楚您要做什么。如果您想在列表中添加多个内容,请清楚您的输入和预期输出是什么。不幸的是,你的帖子混合了问题和实验——让人无法理解你想要做什么!
标签: python list reduce enumerate