[英]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.