2017-07-18 103 views
2

我在python中創建了一個列表,我需要隨機化列表中的項目。Python隨機排序的列表理解

目前我必須使用兩個線爲:

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

我想有一個oneliner並試用了此:

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

但這是self.documents_news值設置爲NoN

如何將隨機部分與創建列表的行組合起來,爲什麼我的方法會產生None值?

+8

把東西推到一條線上並不是很好。 – user2357112

+1

你可以使用'random.choice',但爲什麼?你在線付款嗎? – jonrsharpe

+0

@jonrsharpe在這個特殊情況下是的 - 它只是爲了節省空間,因爲我需要在構造函數中做這些東西,我不允許在其他任何地方寫它,所以我想盡可能多地保證空間的安全 –

回答

3

random.shuffle()不返回的結果,但在地方洗牌。你可以寫一個簡單的函數來完成這兩個操作。

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

我認爲你會很好,只有兩行。但是random.shuffle沒有返回,因爲它正在洗牌。所以,你需要定義一個洗牌函數:

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

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

對不起,請參閱編輯 –