Python中循环嵌套的替代方法

2024-05-18 21:04:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我读过Python的一个关键信念是它是扁平的>;嵌套的。但是,如果我有几个变量在计数,那么多个for循环的替代方案是什么? 我的代码用于计算网格和,如下所示:

def horizontal():
    for x in range(20):
        for y in range(17):
            temp = grid[x][y: y + 4]
            sum = 0
            for n in temp:
                sum += int(n)
            print sum # EDIT: the return instead of print was a mistype

在我看来,它的巢太重了。首先,在Python中被认为是许多嵌套循环的内容(我以前肯定见过两个嵌套循环)。其次,如果嵌套太多,那么编写此代码的另一种方法是什么?


Tags: 代码ingt网格for方案rangetemp
3条回答
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])

您应该使用sum函数。当然,如果你用一个变量来隐藏它,你就不能这样做,所以我把它改成了my_sum

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))

上述输出13260,用于在第一行代码中创建的特定网格。它使用sum()三次。最里面的总和是grid[x][y: y + 4]中的数字加上问题代码中显示的稍微奇怪的初始值sum = 1。中间的总和将17个可能的y值相加。外部总和将中间值与可能的x值相加。

如果网格元素是字符串而不是数字,则替换
sum(grid[x][y: y + 4])
使用
sum(int(n) for n in grid[x][y: y + 4]

可以使用字典显著优化性能

这是另一个例子:

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

相关问题 更多 >

    热门问题