ruby相当于python izip_longest

时间:2013-10-25 01:05:02

标签: python ruby

我正在努力学习红宝石。 此刻我有一个列表列表,我想要相当于以下python代码:

import itertools
l = [[1,2], [3], [10, 20, -4, 5]]
list(itertools.izip_longest(*l, fillvalue='NaN'))

结果是:

[(1, 3, 10), (2, 'NaN', 20), ('NaN', 'NaN', -4), ('NaN', 'NaN', 5)]

列表l中的列表数量可能不同。在红宝石中有没有一种简单的方法来实现它?

1 个答案:

答案 0 :(得分:4)

我认为Ruby标准库中没有izip_longest的直接对应物。

l = [[99,2], [3], [10, 20, -4, 5]]
n = l.map{ |x| x.size }.max
(0...n).map { |i| l.map { |x| x.fetch(i, 'NaN') } }
# => [[99, 3, 10], [2, "NaN", 20], ["NaN", "NaN", -4], ["NaN", "NaN", 5]]