Seite 1 von 1

Per Zufall Einträge in einer Liste auswählen?

Verfasst: Mittwoch 15. Dezember 2010, 05:45
von ledzep1981
Hi wie geht das das man in einer Liste mit einträgen per Zufall einen davon ausfwählt und dann ausgibt?

Re: Per Zufall Einträge in einer Liste auswählen?

Verfasst: Mittwoch 15. Dezember 2010, 06:42
von snafu

Code: Alles auswählen

>>> import random
>>> l = ['foo', 'bar', 'baz']
>>> for x in random.sample(l, len(l)):
...     print x
...     
...     
baz
bar
foo
Wenn's wirklich nur einer sein soll: `random.choice(l)`. Beachte: "Zufall" kann auch bedeuten, dass du mehrfach hintereinander den selben Wert erhälst. Das fällt besonders bei Listen mit wenigen Elementen auf.

Re: Per Zufall Einträge in einer Liste auswählen?

Verfasst: Mittwoch 15. Dezember 2010, 16:44
von derdon
Um das zu vermeiden, kannst du eine Kopie der Liste erstellen und ein Element entfernen, nachdem es "geyieldet" wurde (meiner Meinung nach bietet sich nämlich ein Generator an). Hängt von deinem Ziel ab, was du vorhast.

Re: Per Zufall Einträge in einer Liste auswählen?

Verfasst: Mittwoch 15. Dezember 2010, 16:50
von BlackJack
@derdon: Statt die Liste bei jedem "gezogenen" Element zu verändert, könnte man sie auch einmal am Anfang "mischen" und dann einfach einen Iterator über die "gemischte" Liste verwenden.

Re: Per Zufall Einträge in einer Liste auswählen?

Verfasst: Mittwoch 15. Dezember 2010, 17:07
von snafu
Ja, entweder in-place (`random.shuffle()`) oder eben mittels Kopie mit `random.sample()`. Alles andere macht die Sache imho nur unnötig kompliziert.

Re: Per Zufall Einträge in einer Liste auswählen?

Verfasst: Mittwoch 15. Dezember 2010, 17:42
von derdon
Stimmt. War Quatsch, was ich gesagt hab.

Re: Per Zufall Einträge in einer Liste auswählen?

Verfasst: Donnerstag 16. Dezember 2010, 01:57
von ledzep1981
danke für die antwort mach so ne art wissenquiz und hab die fragen in kategorien unterteilt nach denen ich vor frage. dementsprechend hab ich das ganze auf mehrere listen aufgeteilt und hab jetzt mit random.choice aus jeder liste ne zufallsauswahl gemacht. die zufallsauswahl hab ich dann in eine funktion gepackt die ich nach abfrage der kategorie dann aufrufe.

das problem ich hab x-if abfragen die ich zwar ordentlich kommentiere aber kann man das ganze net evlt. einfacher lösen. beim dictionary wären ja frage und antwort schon in einem schlüsselpaar. wie kann ich vergleichen wenn ich ne eingabe machen ob die dann auch stimmt. das heißt das eben die antwort zum schlüsselpaar des dictionaries gehört.
BlackJack hat geschrieben:@derdon: Statt die Liste bei jedem "gezogenen" Element zu verändert, könnte man sie auch einmal am Anfang "mischen" und dann einfach einen Iterator über die "gemischte" Liste verwenden.
hmm. ja wie funktioniert das genau?

bin jetzt bei byte of python gerade am ende von kapitel 9 und wollte mal ein größeres praktisches programm schreiben, also eben das quiz, mit dem ich was dazu lerne.

mein programm funktioniert soweit. kann ich den programmcode hier mal posten? oder im unterforum für codeschnipsel?

Re: Per Zufall Einträge in einer Liste auswählen?

Verfasst: Donnerstag 16. Dezember 2010, 06:37
von snafu
ledzep1981 hat geschrieben:
BlackJack hat geschrieben:@derdon: Statt die Liste bei jedem "gezogenen" Element zu verändert, könnte man sie auch einmal am Anfang "mischen" und dann einfach einen Iterator über die "gemischte" Liste verwenden.
hmm. ja wie funktioniert das genau?
Das habe ich in meinen beiden Beiträgen beschrieben.

Re: Per Zufall Einträge in einer Liste auswählen?

Verfasst: Donnerstag 16. Dezember 2010, 10:53
von Hyperion
@ledzep1981: Du solltest neben ABoP auch immer die offizielle Doku in einem browser offen haben. Dann kannst Du im random-Modul einfach mal nachgucken, wie die genannten Funktionen aufzurufen sind bzw. was sie bewirken. Und dann probierst Du es einfach in einer Shell aus :-)

Generell solltest Du Dir Gedanken über Deine Datenstrukturen machen; das ganze vor dem Kontext, welche Operationen darauf ausgeführt werden sollen. Dazu können wir mit den bisherigen Infos schlecht etwas sagen. Evtl. beschreibst Du (in einem neuen Thread?) die geplanten Spielregeln und/oder postest Deinen (hoffentlich kommentierten) Quellcode im Pastebin (s. oben in der Menüleiste). Evtl. können wir Dir dan Tipps geben, ob oder auch wie man etwas eleganter / besser lösen kann.