Hallo Community,
ich bin gerade dabei mich in Python einzuarbeiten und befasse mich mit Wahrscheinlichkeiten etc. Ich möchte folgendes realisieren, finde jedoch
nicht die "passende" Funktion dazu bzw. weiß garnicht ob das möglich ist.
Ich möchte eine Liste mit n Elementen (z.B. 10). Darin sollen die Zahlen 1 und 2 zufällig drinnen sein. Zudem soll ein gewisser prozentualer Anteil Nullen darin befinden.
Das Ergebnis soll dann so aussehen (bei 20 % Nullen): Liste = [0,1,1,1,2,2,1,1,0,2] ==> 2 Nullen => 20 %
Ich habe es bisher soweit geschafft:
Liste = []
for i in range(10):
A = random.randint(1,2)
Liste.append(A)
Jedoch habe ich probleme, dass 20 % davon NULLEN sein sollen. Unterstützt die Randomfunktion sowas zufällig?
Liste mit prozentualen Anteil von Zufallszahlen erstellen
Ich habe jetzt eine Liste mit Zufallszahlen (bei 20 % sind es 2 Zahlen), welche die auszutauschenden Elemente darstellt.
Z.B. Austausch = [1,5] => jetzt können die Elemente 1 und 5 mit NULLEN besetzt werden.
Jedoch kann es jetzt vorkommen, dass Werte doppelt/dreifach auftauchen und so sind die 20 % nicht eingehalten. Z.B Austausch = [5,5]. Wenn dann nur das 5. Elemnt ausgetauscht wird, sind es am Ende ja nur 10 % die ersetzt wurden.
Z.B. Austausch = [1,5] => jetzt können die Elemente 1 und 5 mit NULLEN besetzt werden.
Jedoch kann es jetzt vorkommen, dass Werte doppelt/dreifach auftauchen und so sind die 20 % nicht eingehalten. Z.B Austausch = [5,5]. Wenn dann nur das 5. Elemnt ausgetauscht wird, sind es am Ende ja nur 10 % die ersetzt wurden.
Ich würde folgenden Ansatz wählen:
Zuerst wird eine Liste aufgebaut die nur 1 und 2 als zufällige Elemente hat. Anschließend werden die ersten number_of_zeros Elemente mit 0 überschrieben. Dann wird die Liste noch einmal gemischt. Fertig.
Wenn man den Aufbau der Liste mit einer list comprehension durchführt, dann bekommt man Folgendes
Und jetzt kann man das Einfügen der 0 auch noch in die list comprehension verlagern
Code: Alles auswählen
def get_random_numbers_with_zeros(number_of_elements, number_of_zeros):
data = []
for _ in range(number_of_elements):
data.append(random.randint(1, 2))
for index in range(number_of_zeros):
data[index] = 0
random.shuffle(data)
return data
Wenn man den Aufbau der Liste mit einer list comprehension durchführt, dann bekommt man Folgendes
Code: Alles auswählen
def get_random_numbers_with_zeros(number_of_elements, number_of_zeros):
data = [random.randint(1, 2) for _ in range(number_of_elements)]
for index in range(number_of_zeros):
data[index] = 0
random.shuffle(data)
return data
Code: Alles auswählen
def get_random_numbers_with_zeros(number_of_elements, number_of_zeros):
data = [random.randint(1, 2) if index >= number_of_zeros else 0 for index in range(number_of_elements)]
random.shuffle(data)
return data
Wenn hier schon Lösungen zu Hausaufgaben präsentiert werden:
Code: Alles auswählen
def get_random_numbers_with_zeros(number_of_elements, number_of_zeros):
number_of_ones = random.randrange(number_of_elements - number_of_zeros + 1)
number_of_twos = number_of_elements - number_of_zeros - number_of_ones
data = [0] * number_of_zeros + [1] * number_of_ones + [2] * number_of_twos
random.shuffle(data)
return data
Ich habe es jetzt folgendermaßen gelöst:
1) Liste mit n Random-zahlen erstellen
2) Benötigte Anzahl von Nullen einfügen in die Liste
3) Random-Shuffle damit die Nullen schön eingemischt werden
Es ist zwar nicht Profi-Like, reicht aber für mein Vorhaben aus =)
1) Liste mit n Random-zahlen erstellen
2) Benötigte Anzahl von Nullen einfügen in die Liste
3) Random-Shuffle damit die Nullen schön eingemischt werden
Code: Alles auswählen
n = 10
RANDOM_LIST = []
PROZENT = 0.2
# Erzeugung von Random-Nummern von 1-4
for i in range(n):
A = random.randint(1,4)
RANDOM_LIST.append(A)
# Anzahl Nullen bestimmen
AnzNUllen = n * PROZENT
AnzNUllen = int (AnzNUllen)
# Nullen in die Liste einmischen
for i in range(AnzNUllen):
RANDOM_LIST[i] = 0
# Zufällig mischen
random.shuffle(Ergebnisliste)