Windows systems use the backslash bar "\" to separate folders in a path string, while, on the other hand, the normal slash "/" is the one used on Mac OS X/Linux (in general unix) systems.
Even if it's not a big deal since Matlab can handle it, I find it quite disturbing so I wrote this simple code to address the issue.
function [bar]=getbar
% [bar]=getos
% bar="/" for unix systems and bar="\" for Windows systems
os=lower(getenv('OS'));
if (isempty(findstr(os, 'windows')))
%It's a unix system
bar="/";
else
% It's a Windows system
bar="\";
end
My Tips and Tricks for C#, C, C++, MatLAB, Java, LaTeX, Python and more!
Tuesday, February 12, 2013
Saturday, February 2, 2013
Python: how "range" really works
In this post, I gonna show you - with some very simply examples - how the python built-in function range works!
Let's start with the official official python help:
>>>help(range)
Help on built-in function range in module __builtin__:
range(...)
range([start,] stop[, step]) -> list of integers
Return a list containing an arithmetic progression of integers.
range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.
When step is given, it specifies the increment (or decrement).
For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!
These are exactly the valid indices for a list of 4 elements.
Basically the list of integers is built with the following simple rules:
1) The list starts with start, an optional parameter having 0 as its default value
3) The step of the elements is given by step, an optional parameter having 1 as its default value
2) The last element is ALWAYS smaller than stop!
If N indicates the overall number of elements in the list, each element a_i is calculated according to the rule:
a_i = start + step*(i-1)
and the last element MUST be smaller than stop:
a_N = start + step *(N-1) < stop
as a consequence...
N <1+ (stop-start)/step
The result of 1+(stop-start)/step can be an interger or decimal number doesn't matter. The important thing is that N is integer and smaller than 1+(start - start)/step!
Understood? Let's see the examples!
1) What is the output for range(1,9,2)?
start=1
stop=9
step=2
N<1+(stop-start)/step =1 + (9-1)/2=5 hence N=4! Indeed...
>>>>range(1,9,2)
[1, 3, 5, 7]
2) What is the output for range(1,8,2)?
start=1
stop=8
step=2
N < 1+(stop-start)/step =1 + (8-1)/2=4.5 hence N=4! Indeed...
>>>>range(1,8,2)
[1, 3, 5, 7]
3) What is the output for range(9)?
start=0 [default]
stop=9
step=1 [default]
N < 1+(stop-start)/step =1 + (9-1)/1=9 hence N=8! Indeed...
>>>>range(9)
[0, 1, 2, 3, 4, 5, 6, 7, 8]
4) What is the output for range(9,3,-2)?
start=9
stop=3
step=-2
N < 1+(stop-start)/step =1 + (3-9)/(-2)=4 hence N=3! Indeed...
>>>>range(9,3,-2)
[9, 7, 5, 4]
NOTE:
N represents the TOTAL number of elements but python labels them starting from 0 and ending at (N-1)!
Let's start with the official official python help:
>>>help(range)
Help on built-in function range in module __builtin__:
range(...)
range([start,] stop[, step]) -> list of integers
Return a list containing an arithmetic progression of integers.
range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.
When step is given, it specifies the increment (or decrement).
For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!
These are exactly the valid indices for a list of 4 elements.
Basically the list of integers is built with the following simple rules:
1) The list starts with start, an optional parameter having 0 as its default value
3) The step of the elements is given by step, an optional parameter having 1 as its default value
2) The last element is ALWAYS smaller than stop!
If N indicates the overall number of elements in the list, each element a_i is calculated according to the rule:
a_i = start + step*(i-1)
and the last element MUST be smaller than stop:
a_N = start + step *(N-1) < stop
as a consequence...
N <1+ (stop-start)/step
The result of 1+(stop-start)/step can be an interger or decimal number doesn't matter. The important thing is that N is integer and smaller than 1+(start - start)/step!
Understood? Let's see the examples!
1) What is the output for range(1,9,2)?
start=1
stop=9
step=2
N<1+(stop-start)/step =1 + (9-1)/2=5 hence N=4! Indeed...
>>>>range(1,9,2)
[1, 3, 5, 7]
2) What is the output for range(1,8,2)?
start=1
stop=8
step=2
N < 1+(stop-start)/step =1 + (8-1)/2=4.5 hence N=4! Indeed...
>>>>range(1,8,2)
[1, 3, 5, 7]
3) What is the output for range(9)?
start=0 [default]
stop=9
step=1 [default]
N < 1+(stop-start)/step =1 + (9-1)/1=9 hence N=8! Indeed...
>>>>range(9)
[0, 1, 2, 3, 4, 5, 6, 7, 8]
4) What is the output for range(9,3,-2)?
start=9
stop=3
step=-2
N < 1+(stop-start)/step =1 + (3-9)/(-2)=4 hence N=3! Indeed...
>>>>range(9,3,-2)
[9, 7, 5, 4]
NOTE:
N represents the TOTAL number of elements but python labels them starting from 0 and ending at (N-1)!
Subscribe to:
Posts (Atom)