Reputation: 3775
Lets say I have a list:
listOfStuff =([a,b], [c,d], [e,f], [f,g])
What I want to do is to iterate through the middle 2 components in a way similar to the following code:
for item in listOfStuff(range(2,3))
print item
The end result should be as below:
[c,d]
[e,f]
This code currently does not work, but I hope you can understand what I am trying to do.
Upvotes: 31
Views: 126404
Reputation: 1
Simply using built-in slice.
The syntax is:
slice(start,stop,step)
A little complicating when print out.
print(yourlist[slice_code])
Upvotes: 0
Reputation: 123413
A more memory efficient way to iterate over a slice of a list would be to use islice()
from the itertools
module:
from itertools import islice
listOfStuff = (['a','b'], ['c','d'], ['e','f'], ['g','h'])
for item in islice(listOfStuff, 1, 3):
print(item)
# ['c', 'd']
# ['e', 'f']
However, this can be relatively inefficient in terms of performance if the start value of the range is a large value since islice
would have to iterate over the first start value-1 items before returning items.
Upvotes: 10
Reputation: 691
By using iter
builtin:
l = [1, 2, 3]
# i is the first item.
i = iter(l)
next(i)
for d in i:
print(d)
Upvotes: 3
Reputation: 10080
You want to use slicing.
for item in listOfStuff[1:3]:
print item
Upvotes: 4
Reputation: 212835
listOfStuff =([a,b], [c,d], [e,f], [f,g])
for item in listOfStuff[1:3]:
print item
You have to iterate over a slice of your tuple. The 1
is the first element you need and 3
(actually 2+1) is the first element you don't need.
Elements in a list are numerated from 0:
listOfStuff =([a,b], [c,d], [e,f], [f,g])
0 1 2 3
[1:3]
takes elements 1 and 2.
Upvotes: 51