2016-09-20 2 views
0

Für meine Intro-Python-Klasse soll ich das List-Verständnis verwenden, um die Anzahl der Wertepaare für x und y zu finden für einen gegebenen Wert N:Wie kann ich Listenverständnis verwenden, um eine Anzahl von Paaren zu finden, die ein bestimmtes Kriterium erfüllen - Python

a) 0 = x < < y < = N und

b) i^i^x + y eine reelle Zahl ist (i ist die komplexe Zahl sqrt (-1))

Ich habe dies bereits mit for loops im folgenden Code ...

getan
a1 = 0 
for x in range(0, N): 
    for y in range(x+1, N+1): 
     if 1j**x+1j**y == 0 or 1j**x+1j**y == -2 or 1j**x+1j**y == 2: 
      a1 += 1 

wo a1 meine Zählvariable ist, um anzuzeigen, wie viele Paare von x und y den Kriterien entsprechen. Für einen Wert von N = 100 ist a1 1900

Jetzt soll ich in der Lage sein, das gleiche Ergebnis mit einem One-Liner-Liste Verständnis Befehl zu erreichen. Ich habe ein paar Dinge ausprobiert, aber ich kann es nicht zum Laufen bringen. Was ich tun möchte, passt nicht zur Syntax für Listenverständnis. Weiß jemand wie das gemacht werden soll?

Antwort

0

Ich würde ein Genex dafür verwenden, kein LC.

sum(1 for x in range(0, N) for y in range(x+1, N+1) if somepred(x, y)) 
+0

Danke für die Anregung. Ich bin mir sicher, dass es bessere Methoden gibt, aber die Aufgabe besteht darin, Listenverständnis zu verwenden, also muss ich dafür sorgen, dass es mit dieser Methode funktioniert – dvanny

+0

Also setze eckige Klammern um das Genex herum. Viola, sofortige LC. –

+0

OK, jetzt habe ich folgende Zeile a2 = [Summe (1 für x im Bereich (0, N) für y im Bereich (x + 1, N + 1) wenn 1j ** x + 1j ** y = = 0 wenn 1j ** x + 1j ** y == -2 wenn 1j ** x + 1j ** y == 2] was eine ungültige Syntax ergibt, kann ich sehen, was der Code machen soll, aber ich verstehe nicht genug von Python-Syntax zu verstehen, warum es falsch ist – dvanny

0

ich auf Ignacio's excellent answer Kommentar bevorzugen würde aber nicht über die Reputation, sorry! Nur ein zwicken auf Ihrem Prädikat: Der Ausdruck ein wenig zu verkürzen, könnte man folgendes sagen:

1j**x + 1j**y in [0, -2, 2]

, welche die gleiche Wirkung wie hätte:

1j**x + 1j**y == 0 or 1j**x + 1j**y == -2 or 1j**x + 1j**y == 2

+0

OK danke! Das räumt ziemlich viel auf - ich wusste nicht, dass Sie den Kriterien auf diese Weise beitreten könnten. – dvanny

Verwandte Themen