2024-10-04 09:32:17 发布
网友
我正试图将这段Ruby代码翻译成Python,但我理解起来有困难。我理解各个部分,但我对Ruby还不熟悉,我很困惑它们是如何组合在一起的。在
#input: 16 bit array hexes = input.each_slice(4).map.inject([]) { |sum, s| sum << s.join.to_i(2)}
如果有人能帮我破译这个,我将不胜感激! 谢谢你
您可以通过在交互式Ruby提示符(irb)中输入每个步骤来轻松地尝试这一点。在
假设input是:
input
["1", "0", "0", "1", "0", "1", "0", "1", "1", "0", "1", "0", "0", "1", "1", "0"]
each_slice(4)将其分解为:
each_slice(4)
在这种情况下,map是不必要的,不做任何事情。在
map
inject与{}相同。你给它一个初始值,然后用这个值和列表的第一项调用块,然后调用结果和列表中的下一项,等等
inject
所以它被称为:
[[], ["1", "0", "0", "1"]] [[9], ["0", "1", "0", "1"]] [[9, 5], ["1", "0", "1", "0"]] [[9, 5, 10], ["0", "1", "1", "0"]]
最后返回[9, 5, 10, 6]。在
[9, 5, 10, 6]
在Python中,最接近的等价物是非常非Python的:
reduce( (lambda sum, s: (sum.append(int(''.join(s), 2)) or sum)) (input[i * 4:(i + 1) * 4] for i in range(4)), [])
所以你可以做一些类似的事情:
slices = (input[i * 4:(i + 1) * 4] for i in range(4)) sum = [int(''.join(s), 2) for s in slices]
在Ruby中哪个更好:
input.each_slice(4).map { |s| s.join.to_i(2) }
您可以通过在交互式Ruby提示符(irb)中输入每个步骤来轻松地尝试这一点。在
假设
input
是:
^{pr2}$each_slice(4)
将其分解为:在这种情况下,
map
是不必要的,不做任何事情。在inject
与{所以它被称为:
最后返回
[9, 5, 10, 6]
。在在Python中,最接近的等价物是非常非Python的:
所以你可以做一些类似的事情:
在Ruby中哪个更好:
相关问题 更多 >
编程相关推荐