2015-11-02 44 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]' –