2017-06-01 46 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

相关问题