问题描述
我试图了解传递子数组的递归算法和将索引传递给同一数组的递归算法之间的内存使用差异,特别是参考Ruby对内存的处理。我一直在努力地寻找关于Ruby子数组如何工作的文档。
def search(list,target,low,high)
其中high
和low
是索引,并且在方法主体中的一行如下所示:
if list[mid_index] < target
return search(list,mid_index + 1,high)
或者,相同的代码可以写为:
def search(list,target)
...
if list[mid_index] < target
return search(list[(mid_index + 1)..list.length - 1],target)
在第二种情况下,看起来好像我传递了一个数组的子集(只是对相同对象的引用?),但是我实际上是通过使用[]
运算符来创建列表的副本,或将它们用作方法参数?
解决方法
我一直很难找到有关Ruby子数组如何工作的文档。
我认为documentation of Array#[]
非常清楚(粗体强调):
df.groupby('Animal')['Max Speed'].mean() Animal Falcon 370.0 Parrot 25.0 Name: Max Speed,dtype: float64
→print('0 ',df.groupby('Animal').groups,end='\n\n') print('1 ',df.groupby('Animal'),end='\n\n') print('2 ',df.groupby('Animal').get_group('Falcon'),end='\n\n') print('3 ',df.groupby('Animal').get_group('Falcon')['Max Speed'],end='\n\n') print('4 ',df.groupby('Animal').get_group('Falcon')['Max Speed'].mean(),end='\n\n') 0 {'Falcon': Int64Index([0,1],dtype='int64'),'Parrot': Int64Index([2,3],dtype='int64')} 1 <pandas.core.groupby.generic.DataFrameGroupBy object at 0x7fc5499a9a00> 2 Age Animal Max Speed Type 0 10 Falcon 390.0 Captive 1 11 Falcon 350.0 Wild 3 0 390.0 1 350.0 Name: Max Speed,dtype: float64 4 370.0
或ary[start,length]
采用开始和结束索引的new_ary
形式(以及采用Range
的形式)返回 new数组,而不是某种 slice 或 view 数据类型。 (尽管请注意,当然,只要不改变程序的任何可观察属性,就可以允许在后台执行这种优化。)