Erzeugen von "zufälligen" Strings aus einer anderen Zeichenfolge in Python?

Ich versuche, eine zufällige Zeichenfolge mit den Elementen einer anderen Zeichenfolge mit der gleichen Länge zu erzeugen.

Ex) String: AGAACGC

Ich möchte eine zufällige Zeichenfolge mit nur Elementen aus der Zeichenfolge oben

Gerade habe ich:

import random seq = 'AGAACGC' length = len(seq) for blah in range(len(seq)): #Apologies for the lame variable names x = random.randint(0,length - 1) print seq[x] 

Und das wird mir natürlich etwas wie:

EIN

EIN

G

EIN

C

EIN

EIN

Wie würde ich das Programm so ändern, dass es meine zufällige Zeichenfolge auf einer Zeile ausdruckt?

Ich hoffe auf eine relativ einfache Antwort, da ich noch ein Anfänger in Python bin, also will ich nicht zu schick werden. Aber irgendeine Hilfe wäre überhaupt zu schätzen.

Und gibt es einen Weg, um die Randomisierung 'n' Anzahl der Zeiten zu wiederholen?

Sagen Sie statt einer zufälligen String, ich wollte 4 zufällige Strings auf verschiedenen Linien. Gibt es eine einfache Möglichkeit, dies zu tun? (Mein Neuling Geist sagt mir, die Schleife 'n' mal zu wiederholen … aber es muss eine veränderbare Anzahl von randomisierten Strings sein)

Tut mir leid dass ich gefragt habe. Ich würde wirklich etwas Hilfe schätzen. Ich stecke auf ein größeres Problem, weil ich nicht weiß, wie man diese Schritte macht.

2 Solutions collect form web for “Erzeugen von "zufälligen" Strings aus einer anderen Zeichenfolge in Python?”

In Python 3 gibt es eine einfache Möglichkeit, ein Zeichen ohne eine Zeilenumbringung zu drucken, aber in Python 2 gibt es nicht. * Also, der einfachste Weg, dies zu tun ist, um die Saite aufzubauen, dann drucken sie am Ende:

 result = '' for blah in range(len(seq)): #Apologies for the lame variable names x = random.randint(0,length - 1) result += seq[x] print result 

* Es gibt zwei weniger einfache Möglichkeiten: Sie können from __future__ import print_function und dann Python 3 from __future__ import print_function anstelle von Python 2 verwenden, oder Sie können sys.stdout.write(seq[x]) für jedes Zeichen und dann sys.stdout.write('\n') und sys.stdout.flush() am Ende. Aber ich glaube nicht, dass du es willst.


Allerdings gibt es eine Reihe von Möglichkeiten, dies zu verbessern:

  • Verwenden Sie randrange(length) anstelle von randint(0, length - 1) .
  • Benutze random.choice(seq) anstelle von randrange oder randint an erster Stelle.
  • Verwenden Sie _ anstelle von blah für "do not care" Variablen. *
  • Wenn du dich nicht darum kümmerst, was du übertest, nur dass du einmal für jeden Charakter iteration bist, mache einfach for _ in seq: for _ in range(len(seq)): nicht for _ in range(len(seq)):
  • Erstellen Sie eine Liste von Buchstaben, dann rufen Sie ''.join() am Ende, anstatt einen String ''.join() .
  • Verwenden Sie ein Verständnis statt einer expliziten Schleife.

Setzen Sie das alles zusammen:

 print ''.join(random.choice(seq) for _ in seq) 

* Es sei denn, du benutzt gettext für i18n oder etwas anderes, das eine besondere Bedeutung gibt. Die meisten Projekte, die das tun, kommen mit ihrer eigenen Konvention für "egal" Namen – vielleicht __ , oder dummy . Und natürlich wäre es gut für ein solches Projekt, solange du es konsequent benutzt hast.


Um es zu wiederholen, ist euer Neuling richtig! Verwenden Sie einfach eine Schleife. Zum Beispiel (unter der zweiten Version, aber es wird genauso gut mit dem ersten arbeiten):

 n = 4 for _ in range(n): print ''.join(random.choice(seq) for _ in range(len(seq))) 

Das wird 4 verschiedene zufällige Strings ausdrucken. Und wenn du n auf 100 setzt, druckt man 100 verschiedene zufällige Strings.

Vielleicht möchten Sie das in einer Funktion schreiben:

 def print_random_strings(seq, n): for _ in range(n): print ''.join(random.choice(seq) for _ in range(len(seq))) 

Und dann kannst du es so nennen:

 print_random_strings(seq, 4) 

Aber egal, deine Grund-Intuition ist auf dem richtigen Weg.

Das ist genau das, was random.sample bedeutet für:

 import random seq = 'AGAACGC' "".join(random.sample(seq, len(seq))) # Gives you something like: 'CGAAACG' 
  • Random Walk's seltsame Ergebnis in Python 3?
  • Python: Wie man eine Liste von Listen mit zunehmender Länge aus zufälligen Zahlen erstellt?
  • Python- Wie kann ich Fragen, die ein A, B, C, D haben
  • Generieren Sie Zufallszahlen mit einer gegebenen (numerischen) Verteilung
  • Generieren zufällige ID aus der Liste - jinja
  • Effiziente Möglichkeit, Millionen von Zufallszahlen in Python zu generieren und zu verwenden
  • Zufällig aus der Liste mit random.randint in python wählen
  • Holen Sie sich eine zufällige Boolesch in Python?
  • Schneller Weg, um einen zufälligen Index aus einer Reihe von Gewichten in Python zu erhalten
  • Wie man zufällig eine Liste, die mehr Permutationen hat als die PRNG-Periode?
  • 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.