Open
Description
First of all, I understand that this crate is not meant to reproduce all feature in python, but since in the docs about Si python slice is used as comparison, so I believe this is worth to bring up.
Here is some test case with ndarray:
#[macro_use(s)]
extern crate ndarray;
use ndarray::prelude::*;
fn main() {
let x: Array1<usize> = Array::zeros(16);
println!("{}", x.slice(s![..4;1]).len());
println!("{}", x.slice(s![4..;1]).len());
println!("{}", x.slice(s![..-4;1]).len());
println!("{}", x.slice(s![-4..;1]).len());
println!("{}", x.slice(s![..4;-1]).len());
println!("{}", x.slice(s![4..;-1]).len());
println!("{}", x.slice(s![..-4;-1]).len());
println!("{}", x.slice(s![-4..;-1]).len());
}
which return:
4
12
12
4
4
12
12
4
and in the corresponding python test case (in both python 2.7.6 and python 3.4.3):
def main():
x = [0] * 16
print(len(x[:4:1]))
print(len(x[4::1]))
print(len(x[:-4:1]))
print(len(x[-4::1]))
print(len(x[:4:-1]))
print(len(x[4::-1]))
print(len(x[:-4:-1]))
print(len(x[-4::-1]))
if __name__ == '__main__':
main()
which return:
4
12
12
4
11
5
3
13
It seems that, with negative step, the default begin is n - 1 and the default end is 0 for python. To be honest, I prefer the ndarray approach to kept the default consistance, but I believe this should either mention in the docs or changed.
Metadata
Metadata
Assignees
Labels
No labels