Python, generieren zufällige String von Klammern

Ich schaue, um zufällige Längen und Muster von eckigen Klammern zu erzeugen, zum Beispiel []] [[]] [[] [[]] []

Ich habe so weit gelungen, mein Programm zu bekommen, um Klammern zufällig zu generieren, aber zufällig in Bezug darauf, wie oft es sie erzeugt, so derzeit mein Programm gibt mir Ergebnisse wie,

[] [] [] [] [] []

[] [] []

[] [] [] [] []

So gibt es keine Zufälligkeit in den Klammern, nur Zufälligkeit in der Anzahl der Klammern angezeigt.

Ich möchte wissen, wie ich die Bestellung der Klammern zufällig ASWELL als die Menge der Klammern auf Show machen kann.

Hier ist mein Code so weit,

import random import string def randomGen(N): return random.randint(1,N) char1 = '[' char2 = ']' finalist = [] newList = [] newList2 = [] newValue = randomGen(99) for i in range(newValue): newList = char1 newList2 = char2 finalist.append(newList + newList2) for everChar in finalist: print everChar, 

Vielen Dank.

4 Solutions collect form web for “Python, generieren zufällige String von Klammern”

Sie können random.sample , um den Index auszuwählen, wo Sie platzieren random.sample , sagen wir, linke Klammern. Dann platzieren Sie ganz rechts die Klammern:

 In [119]: import random In [122]: N = 10 In [125]: idx = set(random.sample(range(N), N//2)) In [126]: idx Out[126]: {0, 1, 4, 5, 7} In [127]: ''.join(['[' if i in idx else ']' for i in range(N)]) Out[127]: '[[]][[][]]' 

Angesichts Ihrer Beispiele habe ich davon ausgegangen, dass Sie eine gleiche Anzahl von linken und rechten Klammern wünschen. Wenn nicht, verwenden Sie die Lösung von jonrsharpe.

Nun, wenn du nur deinen Code reparieren willst, kannst du einfach machen

 finalist = list("".join(finalist)) random.shuffle(finalist) for everChar in finalist: ... 

Wenn Sie effiziente und bessere Möglichkeiten wünschen, schauen Sie sich die anderen Antworten an.

Sie müssen nach dem Zufallsprinzip aus den beiden Zeichen wählen; Du kannst das alles in einer Zeile machen:

  finallist = [random.choice('[]') for _ in range(random.randint(1, 99))] 

Sie können auch die Ausgabe vereinfachen:

 print " ".join(finallist) 

Ein Beispiel, das ich gerade lief:

 [ ] ] [ [ [ ] [ ] ] [ 
 import random import string def randomGen(N): return random.randint(1,N) length_to_generate = randomGen(99) finalist = [] for i in range(length_to_generate): if random.randint(0, 1): finalist.append("[") else: finalist.append("]") for everChar in finalist: print everChar, 

Sie können auch einen String anstelle einer Liste erzeugen:

 length_to_generate = randomGen(99) finalist = "" for i in range(length_to_generate): if random.randint(0, 1): finalist += "]" else: finalist += "[" print finalist 
  • Extensible voreingenommener Zahlengenerator - Python
  • Gewichtete Stichprobe in Python
  • Probleme haben, eine Simulation deterministisch mit random.Random (0) in Python zu halten
  • Python entfernen Sie ein Element aus einer zufälligen Liste, nachdem sie ausgewählt wurden
  • Effiziente Möglichkeit, Millionen von Zufallszahlen in Python zu generieren und zu verwenden
  • Python-Zufallssequenz mit Samen
  • Erstellen Sie eine Matrix mit zufälliger Position
  • Wählen Sie zufälliges Einzelteil mit Gewicht aus
  • Kennt jemand einen Weg, um die Elemente in einer Liste zu klettern?
  • Beste Weg, um eine Liste von Strings in Python zu randomisieren
  • Wie kann ich das folgende Programm ändern, damit ich sicher bin, dass jeder Brief, den es ersetzt, eindeutig ist?
  • Python ist die beste Programmiersprache der Welt.