2013-07-05 80 views
0

作爲一個側面項目和C++ 11實踐,我正在努力研究Numpy靜態的一個小型n維數組庫。我打算主要遵循Numpy慣例,但在切片的情況下,我正在考慮選擇不同的東西。避免Python風格切片的缺陷

的問題是,範圍的最後一個元素時,使用索引負變量,並且也向後遍歷時,總是無法訪問。例如,array[x:y]不能包含負數y的最後一個元素。編輯:我不知道通過None正是在Python中解決了這個問題。這個問題雖然仍然存在,但它似乎是我想要避免的那種特別解決方案,並且它在C++中的對應方法會很麻煩。

我已經考慮了三種主要的選項:

  1. 使用所包括的範圍,如在Haskell。畢竟,Haskellers並沒有受到特別的困擾。這雖然與Python體驗有很大的偏差。

  2. 禁止負向索引。這在可用性方面並沒有太大的改進,從絕對需要計算最終索引時,從大小上進行簡單的減法就足夠了。

  3. 片相同的方式,在Python。所提到的問題很少出現在真實的代碼中,人們可以在它出現時很容易地識別和規避它。

我目前傾向於選項一。對此事有何看法?

+0

負指數問題與包含/排除端點問題有關嗎? – BrenBarn

+0

這可能會被標記爲主觀。 – 2rs2ts

+0

「範圍的最後一個元素總是無法訪問」 - 您是否將這作爲您的代碼的要求? Python切片不會有這樣一個愚蠢的限制。 – tdelaney

回答

2

你在說誤炸「範圍的最後一個元素使用索引變量時總是無法訪問。」

>>> x = 5 
>>> y = 100 
>>> r = list(range(10)) 
>>> r[x:y]  # much larger number than last index 
[5, 6, 7, 8, 9] 
>>> r[x:len(r)] # length of the list 
[5, 6, 7, 8, 9] 
>>> y = None 
>>> r[x:y]  # variable set to None 
[5, 6, 7, 8, 9] 

None在向後讀取列表時也成立。

+0

請原諒我不清楚的表述,我編輯了這個問題。我也不知道「無」的伎倆。 –