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 
  • Zufallszahl im Bereich 1 bis sys.maxsize ist immer 1 mod 2 ^ 10
  • Wählen Sie zufälliges Einzelteil mit Gewicht aus
  • Warum dieses python-programm funktioniert nicht
  • Wie man eine Liste von zufälligen Integer-Vektor erstellt, deren Summe x ist
  • Erstellen eines niemals wiederholenden zufälligen hexadezimalen Generators
  • Python- Wie kann ich Fragen, die ein A, B, C, D haben
  • Python numpy.random.choice in C # mit nicht / einheitlicher Wahrscheinlichkeitsverteilung
  • "Probe größer als Bevölkerung" in random.sample Python
  • Wie soll ich random.jumpahead in Python verwenden?
  • Unterschied zwischen np.random.seed () und np.random.RandomState ()
  • Machen Sie eine Anzahl wahrscheinlicher, zufällig zu kommen
  • Python ist die beste Programmiersprache der Welt.