2017-04-26 2 views
0

Wie erzeuge ich eine Liste der Länge N mit zufälligen 0 und 1 Werte, aber mit einer bestimmten Anzahl von 1 ist zufällig in der Liste.Einfügen in eine zufällige Liste von 0 und 1 mit einer bestimmten Anzahl von 1's

Zum Beispiel möchte ich eine Liste mit 10 Elementen (0 und 1) und der Anzahl von 1en in der Liste 7.

Wie kann ich das tun?

+2

Es sieht aus wie Sie uns für Sie einen Code schreiben möchten. Während viele Benutzer bereit sind, Code für einen in Not geratenen Coder zu produzieren, helfen sie normalerweise nur, wenn das Poster bereits versucht hat, das Problem selbst zu lösen. Eine gute Möglichkeit, diesen Aufwand zu demonstrieren, besteht darin, den Code, den Sie bisher geschrieben haben, die Beispieleingabe (falls vorhanden), die erwartete Ausgabe und die Ausgabe, die Sie tatsächlich erhalten (Konsolenausgabe, Tracebacks usw.), einzuschließen. Je mehr Details Sie angeben, desto mehr Antworten erhalten Sie wahrscheinlich. Überprüfen Sie die [FAQ] und [fragen]. – MooingRawr

+0

Dang, guter Punkt. Ich antworte normalerweise nicht ohne Versuch, aber dieses war ein "Ich wusste nicht, dass das schon in der Standardbibliothek war" -Abgabe, die mir noch passiert. Ich bin in Ordnung, wenn ich jemanden darauf hinwies, wo es bereits verfügbar ist. –

+0

Hier ist, was ich das erste Mal gemacht habe, aber dann wurde mir klar, dass ich eine bestimmte Anzahl von 1 brauche und deshalb habe ich den Code nicht gepostet, ich habe es vergessen, sorry. x = [sample ([0,1], 1) [0] für k im Bereich (self.size)] – GritcoAndreea

Antwort

3

Sie die Liste machen können, haben die richtige Anzahl von 0 und 1 ist ziemlich leicht

data = [0] * 3 + [1] * 7 

und dann random.shuffle verwenden, um ihre Positionen in der Liste zufällig

from random import shuffle 
shuffle(data) 
print data 

zu machen [ 1, 1, 0, 1, 1, 0, 0, 1, 1, 1]

+1

statt nur Code Dumping für eine Hausaufgabe, warum nicht deine Antwort erklären? – MooingRawr

1

Ein Ansatz, dernicht verwendet:

import random 
random.sample([0]*3 + [1]*7, 10) # [1, 1, 1, 1, 0, 0, 0, 1, 1, 1] 
1

Mit numpy

import numpy as np 
from random import shuffle 
A = np.ones(7, dtype=np.int)   // [1 1 1 1 1 1 1] and data-type as integer 
B = np.zeros(3, dtype=np.int)   // [0 0 0] and data-type as integer 
C = np.concatenate((A, B), axis = 0) // [1 1 1 1 1 1 1 0 0 0] 
shuffle(C)       // [1 0 0 1 1 1 1 0 1 1] 
print C 
+0

Warum verwenden Sie 'numpy', aber dann' random', wenn Sie auch 'numpy.random.shuffle' verwenden können, das für' np.array's optimiert ist ... aber noch wichtiger, warum * numpy at all * da das OP nach einer * Liste * fragt. –

+0

Danke für deinen wertvollen Kommentar :) Ich versuche, Python in die Hände zu bekommen, indem ich durch SO lerne. Was bedeutet "OP" übrigens? –

+1

es ist eine Kurzschrift für "original poster", also, nur die Person, die die Frage gestellt hat. Das Problem, das ich anspreche, ist, dass 'numpy' ein mächtiges Werkzeug für bestimmte Anwendungsfälle ist, aber darüber hinaus ziemlich klobig ist. 'Numpy'-Arrays sind kein Ersatz für Vanilla-Python-Listen, und man sollte die Leute nicht ermutigen, an sie zu denken. Wenn Sie nun eine sehr große, mehrdimensionale Liste verwenden und einige Zahlen darauf anwenden oder lineare Algebra verwenden wollen, * wäre * 'numpy' eine gute Idee. –

2

Ich mag die shuffle() Ansatz in den anderen Antworten; Es gibt jedoch einen anderen Weg, der weniger Aufrufe des Zufallszahlengenerators verwendet. Beginnen Sie mit einer Liste von Nullen. Verwenden Sie dann Probe() die 7 indicies auszuwählen, die auf diejenigen gesetzt werden soll:

>>> from random import sample 
>>> result = [0] * 10 
>>> for i in sample(range(10), k=7): 
     result[i] = 1 

>>> result 
[1, 0, 1, 1, 0, 1, 1, 1, 1, 0] 
Verwandte Themen