Dikei , , :
for sublist in mylist:
item = sublist[1]
...
do_stuff(item)
...
do_other_stuff(item)
...
, , , , , .
- , , , , , :
python -m timeit -s "mylist = [range(1,8) for _ in range(1,8)]" 'for thing in mylist:' ' item=thing[1]' ' pass'
1000000 loops, best of 3: 1.25 usec per loop
python -m timeit -s "mylist = [range(1,8) for _ in range(1,8)]" 'for thing in (i[1] for i in mylist):' ' pass'
100000 loops, best of 3: 2.37 usec per loop
python -m timeit -s "mylist = [range(1,8) for _ in range(1,8)]" 'for thing in itertools.islice(itertools.chain(*mylist),1,None,len(mylist)):' ' pass'
1000000 loops, best of 3: 2.21 usec per loop
python -m timeit -s "import numpy" -s "mylist = numpy.array([range(1,8) for _ in range(1,8)])" 'for thing in mylist[:,1]:' ' pass'
1000000 loops, best of 3: 1.7 usec per loop
python -m timeit -s "import numpy" -s "mylist = [range(1,8) for _ in range(1,8)]" 'for thing in numpy.array(mylist)[:,1]:' ' pass'
10000 loops, best of 3: 63.8 usec per loop
, numpy , , , .
:
python -m timeit -s "mylist = [range(1,100) for _ in range(1,100)]" 'for thing in mylist:' ' item=thing[1]' ' pass'
100000 loops, best of 3: 16.3 usec per loop
python -m timeit -s "mylist = [range(1,100) for _ in range(1,100)]" 'for thing in (i[1] for i in mylist):' ' pass'
10000 loops, best of 3: 27 usec per loop
python -m timeit -s "mylist = [range(1,100) for _ in range(1,100)]" 'for thing in itertools.islice(itertools.chain(*mylist),1,None,len(mylist)):' ' pass'
10000 loops, best of 3: 101 usec per loop
python -m timeit -s "import numpy" -s "mylist = numpy.array([range(1,100) for _ in range(1,100)])" 'for thing in mylist[:,1]:' ' pass'
100000 loops, best of 3: 8.47 usec per loop
python -m timeit -s "import numpy" -s "mylist = [range(1,100) for _ in range(1,100)]" 'for thing in numpy.array(mylist)[:,1]:' ' pass'
100 loops, best of 3: 3.82 msec per loop
Remember that speed should always be second for readability if you do not need it.