Alternative zum Nesting für Loops in Python

Ich habe gelesen, dass einer der wichtigsten Überzeugungen von Python ist, dass flach> verschachtelt. Allerdings, wenn ich mehrere Variablen aufzählen, was ist die Alternative zu mehreren für Loops? Mein Code ist für das Zählen von Raster Summen und geht wie folgt:

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 

Das scheint mir, dass es zu stark verschachtelt ist. Erstens, was gilt für viele verschachtelte Schleifen in Python (ich habe sicherlich gesehen 2 verschachtelte Schleifen vor). Zweitens, wenn dies zu stark verschachtelt ist, was ist ein alternativer Weg, um diesen Code zu schreiben?

3 Solutions collect form web for “Alternative zum Nesting für Loops in Python”

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

Sie sollten die sum verwenden. Natürlich kannst du nicht, wenn du es mit einer Variable my_sum , also habe ich es zu my_sum geändert

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

Die obigen Ausgänge 13260, für das jeweilige Raster, das in der ersten Codezeile erstellt wurde. Es nutzt sum() dreimal. Die innerste Summe addiert die Zahlen im grid[x][y: y + 4] , plus die etwas merkwürdige Anfangswert sum = 1 , die im Code in der Frage angezeigt wird. Die mittlere Summe addiert diese Werte für die 17 möglichen y-Werte. Die äußere Summe addiert die Mittelwerte über mögliche x-Werte.

Wenn Elemente des Gitters Strings statt Zahlen sind, ersetzen Sie
sum(grid[x][y: y + 4])
mit
sum(int(n) for n in grid[x][y: y + 4]

Sie können ein Wörterbuch verwenden, um die Leistung deutlich zu optimieren

Dies ist ein weiteres Beispiel:

 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 
  • Zu viele statisch verschachtelte Blöcke python
  • Python ist die beste Programmiersprache der Welt.