Using list comprehension in Python to do something similar to zip()?

后端 未结 5 1242
暖寄归人
暖寄归人 2021-02-04 14:05

I\'m a Python newbie and one of the things I am trying to do is wrap my head around list comprehension. I can see that it\'s a pretty powerful feature that\'s worth learning.

相关标签:
5条回答
  • 2021-02-04 14:11

    A list comprehension, without some help from zip, map, or itertools, cannot institute a "parallel loop" on multiple sequences -- only simple loops on one sequence, or "nested" loops on multiple ones.

    0 讨论(0)
  • 2021-02-04 14:14

    Possible to use enumerate, as well:

    [[y,airports[x]] for x,y in enumerate(cities)]
    
    0 讨论(0)
  • 2021-02-04 14:15

    If you wanted to do it without using zip at all, you would have to do something like this:

    [ [cities[i],airports[i]] for i in xrange(min(len(cities), len(airports))) ]
    

    but there is no reason to do that other than an intellectual exercise.

    Using map(list, zip(cities, airports)) is shorter, simpler and will almost certainly run faster.

    0 讨论(0)
  • 2021-02-04 14:16

    This takes zip's output and converts all tuples to lists:

    map(list, zip(cities, airports))
    

    As for the performance of each:

    $ python -m timeit -c '[ [a, b] for a, b in zip(xrange(100), xrange(100)) ]'
    10000 loops, best of 3: 68.3 usec per loop
    
    $ python -m timeit -c 'map(list, zip(xrange(100), xrange(100)))'
    10000 loops, best of 3: 75.4 usec per loop
    
    $ python -m timeit -c '[ list(x) for x in zip(range(100), range(100)) ]'
    10000 loops, best of 3: 99.9 usec per loop
    
    0 讨论(0)
  • 2021-02-04 14:29

    Something like this:

    [[c, a] for c, a in zip(cities, airports)]
    

    Alternately, the list constructor can convert tuples to lists:

    [list(x) for x in zip(cities, airports)]
    

    Or, the map function is slightly less verbose in this case:

    map(list, zip(cities, airports))
    
    0 讨论(0)
提交回复
热议问题