我在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
值?
答案 0 :(得分: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 :(得分:-1)
我认为只用两行就可以了。但是random.shuffle没有返回,因为它在适当的位置进行了随机播放。所以你需要定义一个改组的函数:
def shuffled(l):
random.shuffle(l)
return l
documents_news = [(brown.words(fileid), 'news') for fileid in shuffled(brown.fileids('news'))]