Hey, ich bin ganz neu dabei mich mit programmieren zu beschäftigen und jetzt stehe ich gerade vor einem Problem.
Ich habe eine Liste mit Zahlen erstellt und aus dieser Liste 10 zufällige Zahlen ausgewählt (mit der random.sample - Funktion).
Jetzt möchte ich weitere 10 Zahlen auswählen, dabei aber die 10 ausgewählten aus dem Vorgang zuvor nicht nochmal auswählen.
Mein Plan war es die Liste neu zu definieren:
Liste =[1, 2, 3...]
first_random_10 = random.sample(Liste, 10)
Liste = Liste.remove(random_10)
second_random_10 = random.sample(Liste, 10)
Problem:
Leider entfernt die 'remove' Funktion nicht die ausgewählten Elemente der Liste, sondern ja theoretisch den str("random_10").
Was kann ich stattdessen probieren?
Vielen Dank schon mal vorweg
Liste aus Liste entfernen
- __blackjack__
- User
- Beiträge: 14078
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@youknow: `remove()` entfernt nicht ``str("random_10")``, wie kommst Du darauf? Das gibt in diesem Fall einen `NameError` weil `random_10` nicht definiert ist.
Selbst wenn `remove()` ein Argument bekommen könnte das dazu führt das die 10 Zahlen aus der ersten Ziehung entfernt werden, was nicht geht, weil `remove()` *ein* Element entfernt, geht das so nicht weil `remove()` die Liste verändert und nichts zurück gibt.
Ansätze das halbwegs effizient zu lösen: Sich ein Sample von 20 Zahlen geben lassen und das auf zwei Listen aufteilen. Oder, je nach dem wie gross die `Liste` ist und was im weiteren Verlauf passieren soll einfach die komplette Liste mit `random.shuffle()` mischen und da dann zweimal 10 Zahlen vom Ende ”slicen” und mit ``del`` entfernen.
10 Zahlen aus der Liste entfernen würde man jedenfalls eher nicht machen. Man würde da eher mit einer „list comprehension“ eine neue Liste erstellen, ohne die 10 Zahlen. Da könnte es sinnvoll sein für den Test bei jedem Element vorher ein `set()` mit den 10 Zahlen zu erstellen, und das ist natürlich nicht besonders effizient wenn die `Liste` gross ist.
Anmerkungen zu Namen: Die werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase). Also `Liste` müsste `liste` heissen.
Grunddatentypen haben nichts in Namen verloren. Den Typen ändert man gar nicht so selten mal während der Programmentwicklung und dann muss man überall im Programm die betroffenen Namen ändern, oder man hat falsche, irreführende Namen im Quelltext. Wo dann `liste` im Grunde auch drunter fällt. Der Leser möchte ja eigentlich wissen was die Werte in der Liste für eine Bedeutung haben, und nicht einfach nur das es eine Liste ist. Unschön ist hier auch die Deutsch/Englisch-Mischung.
Edit:
Selbst wenn `remove()` ein Argument bekommen könnte das dazu führt das die 10 Zahlen aus der ersten Ziehung entfernt werden, was nicht geht, weil `remove()` *ein* Element entfernt, geht das so nicht weil `remove()` die Liste verändert und nichts zurück gibt.
Ansätze das halbwegs effizient zu lösen: Sich ein Sample von 20 Zahlen geben lassen und das auf zwei Listen aufteilen. Oder, je nach dem wie gross die `Liste` ist und was im weiteren Verlauf passieren soll einfach die komplette Liste mit `random.shuffle()` mischen und da dann zweimal 10 Zahlen vom Ende ”slicen” und mit ``del`` entfernen.
10 Zahlen aus der Liste entfernen würde man jedenfalls eher nicht machen. Man würde da eher mit einer „list comprehension“ eine neue Liste erstellen, ohne die 10 Zahlen. Da könnte es sinnvoll sein für den Test bei jedem Element vorher ein `set()` mit den 10 Zahlen zu erstellen, und das ist natürlich nicht besonders effizient wenn die `Liste` gross ist.
Anmerkungen zu Namen: Die werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase). Also `Liste` müsste `liste` heissen.
Grunddatentypen haben nichts in Namen verloren. Den Typen ändert man gar nicht so selten mal während der Programmentwicklung und dann muss man überall im Programm die betroffenen Namen ändern, oder man hat falsche, irreführende Namen im Quelltext. Wo dann `liste` im Grunde auch drunter fällt. Der Leser möchte ja eigentlich wissen was die Werte in der Liste für eine Bedeutung haben, und nicht einfach nur das es eine Liste ist. Unschön ist hier auch die Deutsch/Englisch-Mischung.
Edit:
Code: Alles auswählen
#!/usr/bin/env python3
import random
def main():
numbers = list(range(100))
random.shuffle(numbers)
for _ in range(2):
count = 10
random_numbers = numbers[-count:]
del numbers[-count:]
assert len(random_numbers) == count
print(random_numbers)
if __name__ == "__main__":
main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari