2017-07-18 5 views
2

Ich erstelle eine Liste in Python und ich muss die Elemente in der Liste randomisieren.Python List Verständnis mit zufälliger Reihenfolge

Derzeit habe ich zwei Linien für die Anwendung:

self.documents_news = [(brown.words(fileid), 'news') for fileid in brown.fileids('news')] 
    random.shuffle(self.documents_news) 

Ich möchte ein oneliner haben und versucht, dieses:

self.documents_news = random.shuffle([(brown.words(fileid), 'news') for fileid in brown.fileids('news')])

Aber dies ist der Wert von self.documents_news-NoN Einstellung .

Wie kann ich den Zufallsteil mit der Erstellung der Liste in einer Zeile kombinieren und warum ergibt mein Ansatz einen None Wert?

+8

Die Dinge auf eine Linie zu schieben ist nicht von Natur aus gut. – user2357112

+1

Sie könnten 'random.choice' verwenden, aber warum? Zahlen Sie an der Linie? – jonrsharpe

+0

@jonrsharpe in diesem speziellen Fall ja - es ist nur zum Speichern von Speicherplatz, weil ich diese Sachen im Konstruktor machen muss und ich nicht anderswo schreiben darf, also möchte ich so viel Platz wie möglich speichern –

Antwort

3

random.shuffle() das Ergebnis nicht zurück, sondern schlurft an seinem Platz. Sie können eine einfache Funktion schreiben, die beides tut.

def shuffle_and_return(x): 
    random.shuffle(x) 
    return x 

self.documents_news = shuffle_and_return([(brown.words(fileid), 'news') for fileid in brown.fileids('news')]) 
-1

Ich denke, Sie wären in Ordnung mit nur zwei Zeilen. Aber random.shuffle gibt keine zurück, weil es an Ort und Stelle gemischt wird. Sie müssen also eine Funktion definieren gemischt:

def shuffled(l): 
    random.shuffle(l) 
    return l 

documents_news = [(brown.words(fileid), 'news') for fileid in shuffled(brown.fileids('news'))] 
+0

Sorry, siehe Änderungen –

Verwandte Themen