Robrecht W. Uyttenhove <ruyttenhove <at> gmail.com> writes: > > Hello, > I tried out the following code:y=[range(0,7),range(7,14),range(14,21),range(21,28),range(28,35)] > >>> y[[0, 1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12, 13], > [14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 25, 26, 27], [28, > 29, 30, 31, 32, 33, 34]] > >>> y[1:5:2][::3] > [[7, 8, 9, 10, 11, 12, 13]] > I expected the 2D list:[[ 7, 10, 13], > [21, 24, 27]] > > Any ideas? > > Thanks, > Rob > PS: I used Python 2.7.3 >
The explanation is rather simple, just break up your complex slicing into its parts: y[1:5:2] => [[7, 8, 9, 10, 11, 12, 13],[21, 22, 23, 24, 25, 26, 27]] and [::3] is asking for the first,4th,7th,... element from this list. Obviously, only the first one's existing, so [7, 8, 9, 10, 11, 12, 13] What you expected is kind of vertical slicing through the rows. I don't think you can achieve this with slicing alone in standard Python, but it's possible with numpy arrays. In Python you will have to combine slicing with a comprehension, like this: [x[::3] for x in y[1:5:2]] Best, Wolfgang -- http://mail.python.org/mailman/listinfo/python-list