2015-02-11 295 views
3

我是新的python。来自C++背景我讽刺的是,无法理解这种语言的简单性,更不用说IDLE如何工作。Python shuffle list不起作用

无论如何我需要编写一个简单的函数,它接受一个列表,并返回一个新列表,它里面洗牌的元素

这是我迄今为止

import random 
def shuffle(): 
    aList = [] 
    i = 0 
    for i in range(0, 5): 
     elements = input(": ") 
     aList.append(elements) 

    shuffleList = random.shuffle(aList) 
    return shuffleList 


shuffle() 

后,我进入元素(在这种情况下是数字),没有输出。所以shuffleList出于某种原因没有被显示在那里。有任何想法吗 ?

>>> 
: 1 
: 2 
: 3 
: 4 
: 5 
>>> 
+0

你不需要在循环之前初始化迭代变量。 – 2015-02-11 20:24:10

+0

如果IDLE不适合你,请不要打扰IDLE。请安装IPython,因为IPython控制台远远优于默认的REPL。 – 2015-02-11 20:24:18

+0

我会和Sublime一起去的。更美观,非常实用。 – 2015-02-11 20:26:55

回答

3

random.shuffle洗牌到位列表,其输出为None

由于您在shuffleList = random.shuffle(aList)中存储并返回其输出,因此不会打印任何内容。

所以取而代之,返回aList回:

import random 
def shuffle(): 
    aList = [] 
    i = 0 
    for i in range(0, 5): 
     elements = input(": ") 
     aList.append(elements) 
    random.shuffle(aList) 
    return aList 
1

random.shuffle()重新排序列表就地和返回无。

2

random.shuffle是就地操作,它不返回任何

>>> l 
[0, 1, 2, 3, 4] 

>>> random.shuffle(l) 
>>> l 
[0, 3, 1, 4, 2] 
2

random.shuffle工作in place,这意味着它的更新提供的参数,而不是返回一个值(而不是默认,None等)。在C++中,您需要将引用传递给列表(例如int** aList),但在Python中,这种区别并不存在。

所以,你实际上设置shuffleListNone,然后返回它!

您可以通过使用print实际显示的结果,当你完成了确认这一点 - 刚返回从功能上不会输出任何东西的价值,据我所知:

results = shuffle() 
print results 

要解决这个问题,只是返回aList,而不是存储在另一个变量的结果:

random.shuffle(aList) 
return aList 
0

洗牌洗牌的列表,它不会返回一个新的列表。试试这个:

import random 

def shuffle(): 
    aList = [] 

    for i in range(0, 5): 
     elements = input(": ") 
     aList.append(elements) 

    random.shuffle(aList) 
    return aList 

print shuffle() 
+0

有什么问题? – 2015-02-11 20:25:11

+0

您正在打印不起作用的功能。返回这个elist就够了。我相信多数民众赞成在问题 – Mozein 2015-02-11 20:31:28

+0

我添加了downvotes开始滚动后,打印顺便说一句。你只是打印一个列表。 – 2015-02-11 20:32:13