2015-11-02 43 views
-1

在Python中,每当我试图用.sort()random.shuffle()名单上像这样的:让foo.sort()等方法返回

a = [1, 3, 2].sort() 
b = random.shuffle([1, 3, 2]) 

abNone因为这两种方法返回None

当然,我知道.sort()sorted()函数。但是,random.shuffle()没有。因此,对于这个解决方法是要做到:

a = [1, 3, 2] 
random.shuffle(a) 
b = a 

another post

b = sorted([1, 3, 2], key=lambda k: random.random()) 

是否有存储文字一般和优雅的方式,通过返回None,到一个变量的方法编辑?

+1

为什么不直接编写自己的'shuffled'来复制,洗牌并返回一个可迭代的参数?这些方法就地改变了他们的论点,所以你已经有了对结果的参考; *这是你传入的同一个对象*。 'b = a'可以在同一个结果之前或之后发生 - 它只是一个参考,**不是**副本。 – jonrsharpe

+0

我编辑了*“直接”*,因为它不清楚你的意思 - 你指的是*文字*? – jonrsharpe

+0

是的,我指的是文字。 –

回答

0
a = [1, 3, 2] 
b = random.shuffle(a) or a[:] 

这将洗牌a,并点b到它的一个副本。

or - 用于链,首先返回真值(或最后一个假)

a[:] - 份a

注意:原a变化。 random.shuffle修改它被赋予任何列表(从文档):

洗牌序列x 到位 ...

我的建议是只写你自己洗牌方法。

+1

但是你不能用一行中的文字来做到这一点,它*不*防止像'sorted'那样修改原始文件。 OP已经接受这一事实使我比他们的问题更困惑;我不确定他们甚至不知道他们在找什么。 – jonrsharpe

+0

@jonrsharpe补充说明。我倾向于同意,但现在不能删除已接受的答案。 –

+0

那么,你可以:'b = [(random.shuffle(x),x)in [a [:]] [0] [1]' –