Wenn Sie außer Sie auch versuchen müssen. Für detaillierte Informationen überprüfen Sie die documentation on error handling heraus.
Um zu überprüfen, ob sich ein Zeichen in einer Zeichenfolge befindet, können Sie auch das Schlüsselwort in verwenden.
Das Ändern einer Liste beim Iterieren kann merkwürdige Auswirkungen haben. Sie sollten also alle Zahlen, die Sie im ersten Lauf entfernen möchten, sammeln und dann über die Liste der zu entfernenden Zahlen iterieren und sie aus der Liste entfernen.
Zuletzt können Sie nicht aus einem Bereichsobjekt nur aus einer Liste entfernen, deshalb müssen Sie es in eins umwandeln. Der endgültige Code kann wie folgt aussehen:
group = list(range(1, 100))
to_remove = []
for num in group:
if '1' in str(num) or '7' in str(num):
to_remove.append(num)
for num in to_remove:
try:
group.remove(num)
except ValueError:
pass
print(group)
Edit: Wie Donkey Kong wies darauf hin, es kann auch Pythons Liste Verständnis verwendet werden und prüft, ob 1 oder 7 in der Zahl ist erreicht werden kann, die Build mit -in jeder Funktion. Auf diese Weise ist es einfach, nach weiteren und anderen Ziffern zu suchen. Der der Code von Donkey Kong zur Verfügung gestellt sieht wie folgt aus:
group = [x for x in range(1, 100) if not any(s in str(x) for s in ['1', '7'])]
print(group)
Edit 2: Verwenden, wenn anstelle von jeder in der Liste Verständnis ist schneller. Dies wurde von juanpa.arrivillaga aufgezeigt. Hier ist sein der Code dafür:
group = [x for x in range(1,100) if not ('7' in str(x) or '3' in str(x))]
print(group)
Wenn ich den Code mit direkt Entfernen von Elementen ausführen, anstelle von 'to_remove', jedes Mal, wenn eine Nummer entfernt wird, wird die folgende Nummer nicht überprüft. Die Filtermethode ist eine gute Alternative und ich füge sie meiner Antwort hinzu. – Leon
Dieser Ansatz ist schneller: '[x für x im Bereich (1.100) falls nicht ('7' in str (x) oder '3' in str (x))] –