【问题标题】:How do you do list slicing equivalent to python in Ruby?你如何在 Ruby 中进行与 python 等效的列表切片?
【发布时间】:2012-06-14 16:00:15
【问题描述】:

我正在尝试将一些 python 代码移植到 ruby​​,并且我做得很好,使用了等效的 ruby​​ 函数,甚至删除/更改了一些以更多地使用 ruby​​ 功能。 然而,在一个核心点,我需要从数组中获取切片 在 python 中,以下工作正常:

output=["Apple","Orange","Pear"]
team_slices=[(0,1),(1,2),(2,3)]
for start,end in team_slices:
    print output[start:end]

会按预期输出:

['Apple']
['Orange']
['Pear']

而 ruby​​ 代码:

output=["Apple","Orange","Pear"]
team_slices=[[0,1],[1,2],[2,3]]
team_slices.each do |start,ending|
    print output[start..ending]
end

将输出:

["Apple","Orange"]
["Orange","Pear"]
["Pear"]

有什么方法可以让切片更等同于 python?我知道我可能在这里遗漏了一些简单的东西

【问题讨论】:

  • "在 python 中,以下工作正常" - 我看到 Python 代码出错,output[start:end] 是一个列表,它被添加到一个字符串中(导致 TypeError)。
  • 您确定该代码可以正常工作吗?在 Ruby 中,您不能将 end 作为变量名。
  • @AndrewMarshall 这是示例代码,显示我的问题,搞砸了
  • @F.J 我的错误,又是快速示例代码来尝试显示问题

标签: python ruby list porting slice


【解决方案1】:

似乎 python 的范围不包括结束值,所以只需在 ruby​​ 中使用 ... 变体:

output=["Apple","Orange","Pear"]
team_slices=[[0,1],[1,2],[2,3]]
team_slices.each do |start, last|
  print output[start...last]
end

PS:在 ruby​​ 中,如果你想遵守约定,你应该使用 2 个空格来缩进;)

编辑|由于 ruby​​ 将其用作语法关键字,因此不得不将 end 重命名为 last

【讨论】:

  • 我确实使用了两个空格,我不确定如何处理这里奇怪的 4 个空格。
  • 刚刚对变量名 end 进行了编辑;) 只是在测试代码时把我绊倒了。
  • @nekosune,所有内容都必须缩进至少四个空格才能获得代码格式,但之后你可以缩进任何你想要的,最简单的方法是按照你想要的方式格式化它而无需任何缩进,全部选中,然后点击{ }按钮到format it as code
  • @AndrewMarshall 不是参数偏移量和长度当你这样做?
  • @AndrewMarshall 我首先尝试过,是的,它在start 之后给了我last 整块而不是切片
猜你喜欢
  • 1970-01-01
  • 2020-08-27
  • 2013-08-28
  • 2022-06-16
  • 2017-04-21
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多