Alternative to nesting for loops in Python

后端 未结 3 1733
小蘑菇
小蘑菇 2020-12-18 10:22

I\'ve read that one of the key beliefs of Python is that flat > nested. However, if I have several variables counting up, what is the alternative to multiple for loops? My c

相关标签:
3条回答
  • 2020-12-18 10:50
    from itertools import product
    
    def horizontal():
        for x, y in product(range(20), range(17)):
            print 1 + sum(int(n) for n in grid[x][y: y + 4])
    

    You should be using the sum function. Of course you can't if you shadow it with a variable, so I changed it to my_sum

    0 讨论(0)
  • 2020-12-18 10:53
    grid = [range(20) for i in range(20)]
    sum(sum( 1 + sum(grid[x][y: y + 4]) for y in range(17)) for x in range(20))
    

    The above outputs 13260, for the particular grid created in the first line of code. It uses sum() three times. The innermost sum adds up the numbers in grid[x][y: y + 4], plus the slightly strange initial value sum = 1 shown in the code in the question. The middle sum adds up those values for the 17 possible y values. The outer sum adds up the middle values over possible x values.

    If elements of grid are strings instead of numbers, replace
    sum(grid[x][y: y + 4])
    with
    sum(int(n) for n in grid[x][y: y + 4]

    0 讨论(0)
  • 2020-12-18 10:58

    You can use a dictionary to optimize performance significantly

    This is another example:

    locations = {}
    for i in range(len(airports)):
        locations[airports["abb"][i][1:-1]] = (airports["height"][i], airports["width"][i])
    
    for i in range(len(uniqueData)):
        h, w = locations[uniqueData["dept_apt"][i]]
        uniqueData["dept_apt_height"][i] = h
        uniqueData["dept_apt_width"][i] = w
    
    0 讨论(0)
提交回复
热议问题