Seite 1 von 1

5 zufällige Listen aus bestehender Liste erstellen

Verfasst: Donnerstag 19. November 2020, 14:53
von no_lita
Hallo liebes Python-Forum ! Dies ist meine erste Frage hier und ich hoffe ihr könnt mir weiterhelfen:

Ich habe eine Liste gegeben : meine_liste = ["ottos", "mops", "kotzt"]
Ausgehend von dieser Liste sollen fünf Ausgaben einer zufälligen Reihenfolge dieser Elemente ausgegeben werden.
Dafür soll random.sample(meine_liste, 3) genutzt werden.
Wenn eine Liste ausgegeben wird, die schon mal vorkam, soll stattdessen (Wiederholung) ausgegeben werden.
Soll dann z.B. so aussehen:
['ottos', 'mops', 'kotzt']
['mops', 'kotzt', 'ottos']
(Wiederholung)
['kotzt', 'ottos', 'mops']
(Wiederholung)

ich habe als erstes eine leere Liste angelegt und wollte die dann immer mit einer zufälligen Liste überschreiben und dann jedes mal neu prüfen, ob die Listen identisch sind. Das ganze dann 5 mal. kriege aber das mit dem überschreiben nicht hin. überhaupt hatte ich bei vielen variant schon viele eigenartige Lösungen raus, aber nie das was ich haben will...
Hier mein Versuch:

import random
meine_liste = ["ottos", "mops", "kotzt"]
sample_liste = [ ]
random_liste = random.sample(lexikon, 3)

for i in range(5):
if random_liste not in sample_liste:
sample_liste = sample_liste + random_liste
print(sample_liste)
else:
print("Wiederholung")

Danke schon mal im Voraus !! Grüße :)

Re: 5 zufällige Listen aus bestehender Liste erstellen

Verfasst: Donnerstag 19. November 2020, 15:25
von Sirius3
Du gibst ja immer sample_liste aus, solltest also sehen, was der Inhalt der Liste ist. Was fällt Dir dabei auf?

lexikon ist nicht definiert, dafür aber ein meine_liste, an dessen Namen zwei Dinge schlecht ist: das meine ist nichtssagend, solange es nicht auch ein euer gibt. Und liste ist ein Datentyp, der aber in einem Variablennamen nichts verloren hat.

Re: 5 zufällige Listen aus bestehender Liste erstellen

Verfasst: Donnerstag 19. November 2020, 17:09
von __blackjack__
@no_lita: Die Aufgabenbeschreibung ist IMHO nicht ganz eindeutig. Sollen genau 5 Ausgaben erfolgen oder soll solange ausgegeben werden bis 5 Listen ausgegeben wurden?

Es reicht auf jeden Fall nicht sich nur die letzte Ausgabe zu merken.

Randbemerkung: *Identisch* können die Listen nicht sein, nur *gleich*. Denn `sample()` liefert immer eine neue Liste die nicht identisch zu einer anderen Liste im Programm sein kann. Ein subtiler Unterschied der aber entscheidet welcher Vergleichsoperator verwendet werden muss wenn man zwei Objekte vergleicht: ``is`` testet ob die Operanden *identisch* sind, und ``==`` ob die Operanden *gleich* sind.

Re: 5 zufällige Listen aus bestehender Liste erstellen

Verfasst: Donnerstag 19. November 2020, 17:18
von no_lita
@sirius3 : die verwechslung mit lexikon/meine_liste tut mir leid...hatte das für das forum nochmal unbenannt aber anscheinend nicht einheitlich. daran lags aber nicht :)

@_blackjack_: es sollen insgesamt 5 listen ausgegeben werden. kann also theoretisch auch 4 mal "Wiederholung" und nur eine liste kommen....

Re: 5 zufällige Listen aus bestehender Liste erstellen

Verfasst: Donnerstag 19. November 2020, 17:35
von no_lita
habe den code abgeändert. bekomme jetzt 5 zufällige Listen , aber bei gleichen Listen bekomme ich nicht "Wiederholung" ausgegeben...

import random
lexikon = ["ottos", "mops", "kotzt"]
sample_liste = []
random_liste = random.sample(lexikon, 3)

for i in range(5):
random_liste = random.sample(lexikon, 3)
if random_liste == sample_liste:
print("Wiederholung")
else:
print(sample_liste + random_liste)

Re: 5 zufällige Listen aus bestehender Liste erstellen

Verfasst: Donnerstag 19. November 2020, 17:51
von no_lita
habs gelöst:

mport random
lexikon = ["ottos", "mops", "kotzt"]
sample_liste = []
random_liste = random.sample(lexikon, 3)

for i in range(5):
random_liste = random.sample(lexikon, 3)
if random_liste not in sample_liste:
sample_liste.append(random_liste)
print(random_liste)
elif random_liste in sample_liste:
print("Wiederholung")


VIELEN DANK :)

Re: 5 zufällige Listen aus bestehender Liste erstellen

Verfasst: Donnerstag 19. November 2020, 17:56
von __blackjack__
@no_lita: Es sollen also *nicht* 5 Listen ausgegeben werden sondern 5 Ausgaben gemacht werden. Denn wenn "(Wiederholung)" ausgegeben wird, dann ist das ja keine Ausgabe einer Liste. Wenn 5 Listen ausgegeben werden sollen, dann könnte eine Ausgabe ja beispielsweise so aussehen:

Code: Alles auswählen

'mops', 'ottos', 'kotzt']
(Wiederholung)
['ottos', 'kotzt', 'mops']
['kotzt', 'mops', 'ottos']
(Wiederholung)
['kotzt', 'ottos', 'mops']
(Wiederholung)
(Wiederholung)
(Wiederholung)
(Wiederholung)
(Wiederholung)
['ottos', 'mops', 'kotzt']
Das ``elif`` ist unnötig denn es kann ja nur zwei Fälle geben und wenn der eine nicht zutrifft braucht man den anderen nicht explizit prüfen. Das ist einfach ``if``/``else``.

Sirius3 erwähnte es bereits: Grunddatentypen wie `liste` haben nichts im Namen zu suchen.

Der `sample()`-Aufruf sollte nur einmal im Code vorkommen. Der erste vor der Schleife erzeugte Wert von `random_liste` wird ja auch gar nirgends verwendet.

Re: 5 zufällige Listen aus bestehender Liste erstellen

Verfasst: Donnerstag 19. November 2020, 18:51
von Sirius3
Wenn die Bedingung des elif exakt das Gegenteil von der im if ist, dann benutzt man else.

Code: Alles auswählen

import random
lexikon = ["ottos", "mops", "kotzt"]

samples = []
for i in range(5):
    sample = random.sample(lexikon, len(lexikon))
    if sample not in samples:
        samples.append(sample)
        print(sample)
    else:
        print("Wiederholung")