簡體   English   中英

替代Python中的循環嵌套

[英]Alternative to nesting for loops in Python

我已經讀過Python的一個關鍵信念是flat>嵌套。 但是,如果我有幾個變量計數,多個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中的許多嵌套循環(我之前已經看過2個嵌套循環)。 其次,如果嵌套太多,編寫此代碼的另一種方法是什么?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM