For-Schleifen und mehrere Bedingungen
In C++, es ist möglich zu sagen:
for (int i = 0; i < 100 && !found; i++) {
if (items[i] == "the one I'm looking for")
found = true;
}
so brauchen Sie nicht, um die "break" - Anweisung.
In Python, ich denke, Sie müssen schreiben:
found = False
for item in items:
if item == "the one I'm looking for"
found = True
break
Ich weiß, dass ich schreiben kann, einen generator, der hat den gleichen code in es, also kann ich ausblenden brechen Ding. Aber ich Frage mich, ob es irgendeine andere Weise zu implementieren, die die gleiche Sache (mit gleicher Leistung) ohne Verwendung von zusätzlichen Variablen oder while-Schleife.
Ich weiß, wir können sagen:
found = "the one I'm looking for" in items
Ich versuche nur zu lernen, wenn es ist möglich, mehrere Bedingungen in for-Schleifen.
Dank.
- Ja, es ist möglich zu sagen, was du gerade gesagt hast, in C++, aber ich garantiere Ihnen, dass Sie es nicht tut, was Sie soll—der Komma-operator die Evaluierung der linken-hand-argument (was keine Nebenwirkungen hat, hier) und dann wertet seinen rechten argument und Ergebnisse in diesem Wert.
- Die C++ wirklich so sein sollte:
for (int i = 0; i < 100 && !found; ++i)
- Dies hängt davon ab, was Sie wollen passieren, wenn das Element nicht gefunden wird.
- Ja, danke 🙂 ich habe es behoben!
- Aber es bricht immer noch die Schleife ohne Durchlaufen aller Elemente. Das ist es, was ich in Python. Ich bin auf der Suche nach einer alternative für die Verwendung einer break-Anweisung.
- Sie haben eine Besondere Verwendung im Auge?
break
ist oft sauberer, da Sie nicht brauchen, um die Struktur der Schleife, damit der rest nicht ausgeführt werden, wenn Sie stoppen die Schleife früh. Auch nicht mitbreak
führt zu einer komplexen Bedingung in der C++for
- und Python -while
Schleifen. - Ich denke, es ist viel sauberer, da Sie nicht brauchen, um Lesen Sie den code innerhalb der Schleife und sehen, wo der Bruch ist. Ohne Verwendung von break sehen Sie die loop-Bedingung auf die erste Zeile.
- Ich sehen, was Sie bekommen in. Meine Antwort ist vielleicht etwas besser lesbar in einigen Fällen, aber im Allgemeinen Sie noch brauchen würde, um Lesen Sie die Schleife, um zu sehen, wenn die Bedingung wäre falsch (D. H. zu sehen, wenn die Variablen in der condition-Anweisung festgelegt sind, auf Werte, die bewirken würde, dass die Bedingung nicht).
- Ich bin damit einverstanden, aber es ist immer noch schön, wenn Sie können Rückgang dieser Fälle.
- natürlich, in C++ würde man nicht mit einem
for
Schleife. Verwenden Sie:bool found = std::find(items, items + 100, "the one") != items + 100;
(C++03) oderbool found = std::any_of(std::begin(items), std::end(items), [](std::string const& s) { return s == "the one"});
(C++0x), letztere, wodurch beliebiger Bedingungen. - Ich weiß, es ist nur ein Beispiel, vergleichen Sie die for-Schleifen in Python und C++. Es geht nicht um die Suche nach einem Element in einer Schleife, es könnte etwas viel komplizierter. Also, Suche nach einem Element in einer Liste nicht der Fall ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Natürlich können Sie auch schreiben ohne die lambda-Funktion als
Nun sieht es für mich aus, dass es die C-version mit zusätzlichen Variablen
Wenn Sie wirklich brauchen nur die variable gesetzt (und brauchen nicht zu wissen, der Punkt), dann nutzen Sie einfach
Seit
for
- Schleifen in Python Iteration über eine Sequenz und nicht als eine Bedingung und eine mutation Anweisung, diebreak
ist notwendig, um aus der Patsche helfen, früh. In anderen Worten,for
in python ist das nicht eine bedingte Schleife. Das Python-äquivalent zu C++'sfor
wäre einwhile
- Schleife.Sogar in C++,
for
- Schleifen geschrieben werden kann alswhile
- Schleifen, wenn Sie nicht enthalten einecontinue
- Anweisung.for
in Python ist wieforeach
in c# und ist völlig anders als derfor
in C, C++ oder Java.for
würde wahrscheinlich gewählt als unpythonic.break
dient dem gleichen Zweck, und jeder C-ähnlichen Bedingungen auffor
Schleifen würde hinzufügen unnötige Komplexität zu jenen Schleifen.for
Schleifen würde es erlauben, komplexere Schleife Körper, es ist, dass es erfordern würde Ihnen. Der syntax-Funktion könnte verwendet werden, in eine komplexe Anweisung. Das bedeutet nicht, dass das feature selbst erhöht die Komplexität.!found
und nichtnot found
?if
ist nicht die einzige Anweisung, um eineelse
Klausel in Python:while
undtry
auchelse
Klauseln.else
stimmt nicht mitif
.for
. Das ist Absicht.found
variable nicht benötigt, so Häufig, weil die Schleifen-Konstrukten ähneln, aber unterschiedlich zu C (und anderen Sprachen). Die Unterschiede wichtig zu erfahren, es sei denn, Sie sind glücklich, um die Abwanderung aus beschissen Python-codebreak
ist nicht ausgeführtfor
oderwhile
Schleife dann dieelse
- Klausel wird ausgeführt.sowas?
EDIT:
for
überhaupt.for
nicht behandeln Bedingungen.Ja, Sie können!
Aber es ist verrückt, wie Sie auch weiterhin die Schleife auch nach x gefunden wird, so tun Sie es nicht. 🙂