Array mit eindeutigen und zufälligen Integers

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Coziac
User
Beiträge: 2
Registriert: Donnerstag 30. November 2017, 00:54

Guten Abend liebe Community!

Ich bin recht neu in Python und stelle mir deshalb zum Üben selbst gerne ein paar Aufgaben. Dafür möchte ich zuerst simple Sortier-Algorithmen in Python schreiben.
Doch vorab möchte ich mir ein endliches Array erstellen, bei dem jede Zahl nur ein einziges mal vorkommt. Dabei sollen die Indizes mit zufälligen Integern belegt werden und jeder Wert darf nur einmal auftauchen.

also bei Zahlen zwischen 1 und 20 zum Beispiel so:

a[0]=15
a[1]=7
...

Kennt jemand vielleicht eine schnelle Methode, die mir gewährleistet, dass jede Zahl auch wirklich nur einmal in meinem Array vorkommt? Bei jeder neuen generierten Zahl erstmal bei allen belegten Stellen zu prüfen, ob der Wert schon existiert, wäre ja höchst ineffizient.
__deets__
User
Beiträge: 14533
Registriert: Mittwoch 14. Oktober 2015, 14:29

zahlen = random.shuffle(i for i in range(100))

zB.
Benutzeravatar
Coziac
User
Beiträge: 2
Registriert: Donnerstag 30. November 2017, 00:54

i for i in range(100) erzeugt mir also eine Liste mit den Zahlen 1 bis 100 und die shuffle-Methode mixt die Werte durch?

verstehe nicht ganz, wie "i for i in" zu lesen ist
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Code: Alles auswählen

import random

def get_random_ints(start, stop, size=None):
    ints = range(start, stop)
    if size is None:
        size = len(ints)
    return random.sample(ints, size)
__deets__ hat geschrieben:zahlen = random.shuffle(i for i in range(100))
Das führt zu einer Fehlermeldung weil shuffle() nicht mit einem Generator umgehen kann. Abgesehen davon hat ein i for i in some_iterable außer der Erzeugung eines Generators keinen wirklichen Effekt, da ja so rein gar nichts dabei verändert wird.
__deets__
User
Beiträge: 14533
Registriert: Mittwoch 14. Oktober 2015, 14:29

Man sollte nicht kurz vorm schlafen gehen Posten....

Der Generator gehört natürlich wahlweise in ein List oder zur List-Comprehension gemacht.

Und shuffle verändert in Place :x

zahlen = [i for i in range(100)]
random.shuffle(zahlen)
Sirius3
User
Beiträge: 17746
Registriert: Sonntag 21. Oktober 2012, 17:20

@__deets__: ... und auch nicht kurz nach dem Aufstehen :wink:

Code: Alles auswählen

zahlen = list(range(100))
random.shuffle(zahlen)
__deets__
User
Beiträge: 14533
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wer sagt denn was von aufstehen! Hier wird noch im Bett gelegen.
Antworten