Ich versuche, den folgenden Code als One-Liner schreiben.Nested List Comprehension mit Flow Control
for x in range(a, b+1):
prime = True
for y in range(2, int(x**0.5)):
if x%y == 0:
prime = False
break
if prime:
return x
Dies ist die Suche nach Primzahlen zwischen a und b. Ich werde jede Primzahl in einer Liste speichern. Der obige Code prüft jede Zahl im Primzahlbereich. Das Problem ist, dass ich diese verschachtelte Schleife als ein einzeiliges Listenverständnis schreiben muss. Das Problem, das ich habe, ist, dass das Listenverständnis die zweite Schleife nicht durchlaufen wird. Es wird mit 2 überprüft, dann aus der Schleife herausspringen.
habe ich versucht, diesen Ansatz, und es scheiterte kläglich: ([x for x in range(10, 21) for y in range(2, int(x**0.5)) if x%y != 0])
Sie Code, den Sie gezeigt haben, hat nicht viel Sinn. 'next' ist eine eingebaute Funktion, die Sie auf einem Iterator aufrufen können, es ist keine Anweisung, wie Sie es hier scheinen. Meinst du vielleicht "weitermachen"? Das ist eine Aussage, obwohl es die äußere Schleife, die ich denke, dass Ihr Algorithmus benötigt, um richtig zu funktionieren, nicht fortsetzen wird. Du könntest es mit 'break' im' if' arbeiten lassen und die return-Zeile in einen 'else'-Block einfügen, der an die innere' for'-Schleife angehängt ist (ein komisches Bit der Python-Syntax). – Blckknght
Warum scheint es, dass es aus der Schleife "herausspringt"? Die von Ihnen angegebene Codezeile wird keine sichtbare Ausgabe erzeugen. Der Teil Ihres Codes in eckigen Klammern ist ein Listenverständnis, das Sie normalerweise an einen Variablennamen binden würden. Dann können Sie es zum Beispiel ausdrucken, und erst dann sehen Sie, ob etwas darin ist. –
Warum würden Sie es als Listenverständnis schreiben? Du willst keine Liste; Sie möchten einen einzelnen Wert. – chepner