Pythonic shortcut for doubly nested for loops?

前端 未结 5 787
再見小時候
再見小時候 2021-02-12 16:28

Consider if I had a function that took a tuple argument (x,y), where x was in the range(X), and y in the range(Y), the normal way of doing it would be:

for x in          


        
相关标签:
5条回答
  • 2021-02-12 17:03

    Try product from itertools: http://docs.python.org/library/itertools.html#itertools.product

    from itertools import product
    
    for x, y in product(range(X), range(Y)):
        function(x, y)
    
    0 讨论(0)
  • 2021-02-12 17:04

    Pythonic they are -> (modify according to your requirements)

    >>> [ (x,y)   for x in range(2)   for y in range(2)]
    [(0, 0), (0, 1), (1, 0), (1, 1)]
    

    Generator version :

    gen = ( (x,y)   for x in range(2)   for y in range(2) )
    >>> for x,y in gen:
    ...     print x,y
    ... 
    0 0
    0 1
    1 0
    1 1
    
    0 讨论(0)
  • 2021-02-12 17:17

    You can use product from itertools

    >>> from itertools import product
    >>> 
    >>> for x,y in product(range(3), range(4)):
    ...   print (x,y)
    ... 
    (0, 0)
    (0, 1)
    (0, 2)
    (0, 3)
    (1, 0)
    (1, 1)
    (1, 2)
    (1, 3)
    
    ... and so on
    

    Your code would look like:

    for x,y in product(range(X), range(Y)):
        function(x,y)
    
    0 讨论(0)
  • 2021-02-12 17:24

    You can use itertools.product():

    from itertools import product
    for xy in product(range(X), range(Y)):
        function(xy)
    
    0 讨论(0)
  • 2021-02-12 17:24
    from itertools import product
    
    def something_like_range(*sizes):
        return product(*[range(size) for size in sizes])
    

    for a usage close to what you wanted:

    for x,y in something_like_range(X,Y):
        your_function(x,y)
    

    =)

    0 讨论(0)
提交回复
热议问题