您可以创建一个列表列表,然后使用 reduce 加入它们。
print [[n,n*n] for n in range (10)]
[[0, 0], [1, 1], [2, 4], [3, 9], [4, 16], [5, 25], [6, 36], [7, 49 ], [8, 64], [9, 81]]
print reduce(lambda x1,x2:x1+x2,[[n,n*n] for n in range (10)])
[0, 0, 1, 1, 2, 4, 3, 9, 4, 16, 5, 25, 6, 36, 7, 49, 8, 64, 9, 81]
print reduce(lambda x1,x2:x1+x2,[[n**e for e in range(1,4)]\
for n in range (1,10)])
[1, 1, 1, 2, 4, 8, 3, 9, 27, 4, 16, 64, 5, 25, 125, 6, 36, 216, 7, 49, 343, 8, 64, 512、9、81、729]
Reduce 接受一个可调用表达式,该表达式接受两个参数并从前两项开始处理一个序列。最后一个表达式的结果然后用作后续调用中的第一项。在这种情况下,每个列表一个接一个地添加到列表列表中的第一个列表,然后返回该列表作为结果。
列表推导使用“for var in 序列”表达式定义的变量和序列隐式调用带有 lambda 表达式的 map。以下是同样的事情。
map(lambda n:[n,n*n],range(1,10))
[[1, 1], [2, 4], [3, 9], [4, 16], [5, 25], [6, 36], [7, 49], [8, 64 ], [9, 81]]
我不知道有一个更自然的 Python 表达式来表示 reduce。