python - 在 Ruby 和 Python 中使用 yield 创建列表

标签 python ruby list yield

我正在尝试想出一种优雅的方法来从在 Python 和 Ruby 中产生值的函数创建列表。

在 Python 中:

def foo(x):
    for i in range(x):
        if bar(i): yield i 
result = list(foo(100))

在 ruby 中:

def foo(x)
  x.times {|i| yield i if bar(i)}
end
result = []
foo(100) {|x| result << x}

虽然我喜欢使用两种语言工作,但我一直对 Ruby 版本必须初始化列表然后填充它感到有点困扰。 Python 的 yield 导致简单的迭代,这很棒。 Ruby 的 yield 调用一个 block ,这也很棒,但是当我只想填充一个列表时,感觉有点笨拙。

有没有更优雅的 Ruby 方式?

更新 修改了示例以表明函数产生的值的数量不一定等于 x。

最佳答案

因此,对于您的新示例,试试这个:

def foo(x)
  (0..x).select { |i| bar(i) }
end

基本上,除非您正在编写自己的迭代器,否则在 Ruby 中您不需要经常使用 yield。如果您停止尝试使用 Ruby 语法编写 Python 习语,您可能会做得更好。

关于python - 在 Ruby 和 Python 中使用 yield 创建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/608951/

相关文章:

python - 比较两个数据库的任何差异

python - Pandas - 根据列列表中的值选择行

python - python 中哪些变量是在进程之间共享的而不是共享的?

ruby-on-rails - 如何在 Vim 中缩进 Ruby 和 Rails 代码?

Python 对内部带有整数的字符串数组进行排序

Python从字符串中删除空格将其转换为int

ruby - 如何使用从 heroku 以编程方式获取当前主机并在 rspec 测试中使用它?

ruby-on-rails - 曲别针处理器未加载到 Rails 3.0.0rc 中

Python 列表切片效率

list - SASS:参数列表中的最后一项