随机顺序的Python列表理解

时间:2017-07-18 19:17:16

标签: python list-comprehension

我在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值?

2 个答案:

答案 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'))]