Ich bin ein Anfänger zu Python und lehre mich Listen-Comprehensions. Ich habe mich mit fast allen For-Loop-Codes, die ich übersetzt habe, gut geschlagen, aber ich bin sehr auf dem zurückgeblieben, was ich für eine ziemlich einfache Schleife hielt.Python for-loop zum Verständnis der Liste
n = 10000
def sim(y):
count = 0
for i in range(10000):
if 0.9 <= y[i] <= 1.8:
count += 1
probability = count/10000.0
print("P(a < x <= b) : {0:8.4f}".format(probability))
print ("\t case: \n"),sim([0.25 if random() < 0.8 else 1.5 for r in range(n)])
Bisher habe ich auf den folgenden Variationen versucht, aber es ist alles immer Fehler auf die Verwendung von Listen im Zusammenhang wie „‚int‘Objekt ist unsubscriptable“ und „nicht unterstützte Operandtyp (e) für +: 'int' und 'liste' ".
def sim(y):
c4 = sum([y for range(y) in range(len(y)) if 0.9 < y[i] <= 1.8])/10000
print("P(a < x <= b) : {0:8.4f}".format(c4))
ist der Zweck im Grunde um den Parameter sim() und iterieren über die Länge der übergebenen zu nehmen, während von 1 nur für die Werte, die durch den Zustand zwischen 0,9 und 1,8 Ergebnis erhöht werden wahr. Ich versuche, jedes der n Randoms für diese Bedingung zu überprüfen. Dann summiere nur diejenigen, die wahr sind.
Übrigens sollte die Antwort etwa 0,2 funktionieren - wenn Sie es überprüfen möchten, denken Sie nur, dass 1,5 die einzige Möglichkeit ist, zwischen 0,9 und 1,8 zu passen.
Ich schätze Ihre Geduld, während ich lerne.
Danke Martijn, aber es scheint nicht alle Zahlen summiert zu bekommen. Es gibt 0.00 Ergebnis zurück. Ich habe versucht 0.9
stackuser
@ stackuser: Ah, das ist, weil das eine Ganzzahl-Division ist; korrigiert, um stattdessen die Division zu floaten. –
@stackuser: Versuche meine Version .. 'i' ist kein Index in' y', es ist ein Wert * von * 'y'. Der Code läuft über "y" selbst, nicht über einen 'Bereich()'. –