2017-06-01 78 views
1

你好我試圖定義返回改組名單L1不使用方法random.shuffle改變原來的列表L功能,但我得到這個錯誤信息:builtin_function_or_method」對象沒有屬性洗牌

builtin_function_or_method object has no attribute shuffle

import random 
def shuffle_list(l): 
    l1=random.shuffle(l) 
    return(l1) 

回答

0

random.shuffle改變列表的順序並返回None。

>>> lst = [1,2,3] 
>>> shuffle_list(lst) 
>>> print lst 
[3, 1, 2] 
>>> shuffle_list(lst) 
>>> print lst 
[1, 3, 2] 

所以,如果你不關心原始列表的順序,你的代碼可能僅僅是:

​​
+0

但是當我用簡單的方法原始列表的變化,我想改組副本,無修改原始列表 – Lahbabi

+0

在這種情況下,有人在這裏回答:https://stackoverflow.com/a/12978830/6616057 –

0

random.shuffle()修改列表就地,不返回任何東西,所以你需要先進行列表的說法,洗牌的一個副本,然後返回它,爲了保持原始:

import random 

def shuffle_list(lst): 
    lst2 = lst.copy() 
    random.shuffle(lst2) 
    return lst2 

items = list(range(10)) 
shuffled = shuffle_list(items) 

print(items) # => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
print(shuffled) # => [6, 2, 1, 9, 3, 0, 8, 4, 5, 7] (or some other rearrangement) 
+0

任何人都可以請解釋錯誤消息,即使我應用方法在副本上沒有任何變化 – Lahbabi

+0

@Lahbabi :你說你得到的錯誤沒有意義。如果你編輯了你的問題,幷包含了導致最終錯誤信息的整個回溯,那麼也許有人可以告訴你爲什麼你得到它。無論如何,我的答案並不能解決問題嗎?如果是這樣,請接受它。請參閱[_當有人回答我的問題時該怎麼辦?_](http://stackoverflow.com/help/someone-answers) – martineau

相關問題