slicing behaviour question of a list of lists
function, python, slice
Solution
The reason why these two behave differently is because `f()[0:2][0:10]` works like this:
- `f()` gives you a list of lists.
- `[0:2]` gives you a list containing the first two elements in the list of lists. Since the elements in the list of lists are lists, this is also a list of lists.
- `[0:10]` gives you a list containing the first ten elements in the list of lists that was produced in step 2.
In other words, `f()[0:2][0:10]` starts with a list of lists, then takes a sublist of that list of lists (which is also a list of lists), and then takes a sublist of the second list of lists (which is also a list of lists).
In contrast, `f()[i]` actually extracts the `i`-th element out of your list of lists, which is just a simple list (not a list of lists). Then, when you apply `[0:10]`, you are applying it to the simple list that you got from `f()[i]` and not to a list of lists.
The bottom line is that any solution that gives the desired behavior will have to access a single array element like `[i]` at some point, rather than working only with slices like `[i:j]`.
Problem
I got a function like ``` def f(): ... ... return [list1, list2] ``` this returns a list of lists ``` [[list1.item1,list1.item2,...],[list2.item1,list2.item2,...]] ``` now when I do the following: ``` for i in range(0,2):print f()[i][0:10] ``` it works and print the lists sliced but if i do ``` print f()[0:2][0:10] ``` then it prints the lists ignoring the [0:10] slicing. Is there any way to make the second form work or do I have to loop every time to get the desired result?