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 mit break 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) oder bool 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.

InformationsquelleAutor pocoa | 2011-05-26
Schreibe einen Kommentar