Multi variable List Comprehension
Arbeite ich an Projekt Euler #35, und ich muss die zirkuläre Permutationen, eine Zahl. Mit itertools
, kann ich leicht die Permutationen, eine Zahl. Jedoch, ich will es tun, mit einer Liste Verständnis, wie es scheint, mehr Pythonic; ich versuche auch, mir vertraut zu machen mit der Liste Verstehens).
Fand ich, dass alle kreisförmigen Primzahlen können nur die Ziffern 1, 3, 7 und 9 (mit Ausnahme von 2 und 5, die kreisförmige Primzahlen-definition). Wenn eine andere Ziffer war in der Nummer (0, 2, 4, 5, 6, oder 8) eine der Permutationen, wäre nicht ein prime (wie die Ziffer wäre die Letzte, die in mindestens eine der Permutationen).
So, ich habe versucht, dies zu tun:
from itertools import permutations
l = [x for x in list(permutations('1397', y)) for y in range(7)]
Ich brauchte, um y for y in range(7)
so, dass ich unterschiedliche Längen Permutationen.
Jedoch, dies gab mir eine TypeError
:
Traceback (most recent call last):
File "<pyshell#23>", line 1, in <module>
l = [x for x in list(permutations('1397', y)) for y in range(7)]
TypeError: an integer is required
Dies funktioniert, aber es ist nicht die Verwendung von zwei Variablen in einer Liste Verständnis:
l = []
for y in range(7):
l.append([x for x in list(permutations('1379', y))])
Wie kann ich eine double-variable list comprehension? Danke!
for
um geschachtelte Schleifen. for y in range(7): for x in permutations('1397', y): newlist.append(x)
wird newlist = [x for y in range(7) for x in permutations('1397', y)]
.list(permutations('1379', y))
ist bereits eine Liste mit der for-Schleife: [x for x in list(permutations('1379', y))]
ist nutzlos.Sie sollte nicht mit itertools.permitations überhaupt. Das problem ist zu finden, zirkuläre Permutationen, die eine Besondere Art der permutation. Es ist viel einfacher zu generieren, die Sie direkt ohne itertools.permutation (Sie benötigen, um Ergebnisse zu filtern sonst). Auch mit speziellen python-Standard-library-Funktionen ist nicht geeignet für übungen wie die, die Sie zu lösen versuchen
InformationsquelleAutor Rushy Panchal | 2013-01-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
for y in range(7)
Teil kommen sollte, bevor die permutation Schleife.:Liste oben Verständnis ist äquivalent zu :
Beispiel:
Und die
list-comprehension
- version für Ihr Beispiel,ist:
InformationsquelleAutor Ashwini Chaudhary
votedown
?? während beide Ergebnisse gleich sind.Ich bin nicht sicher, warum jemand downvoted, aber ein +1 von mir.
Dieses Ergebnis ist nur die gleichen, da die ursprüngliche Frage hat
[x for x in ...]
. Ich sehe das so, die Idee ist, dass es eine verschachtelte Liste Verständnis, das es ermöglichen würde, für so etwas wie[x*x for x in ...]
, das ist nicht möglich mit dieser Antwort. Vielleicht könnte man einfach einführen, Ihre Antwort mit etwas entlang der Linien von "don' T verwenden eine verschachtelte Liste, Verständnis, nutzen Sie einfach dieses:".InformationsquelleAutor namit