Python乱序列表不起作用

5

我刚接触Python。来自C++背景,讽刺的是我很难理解这种语言的简单性以及IDLE如何工作。

不管怎样,我需要编写一个简单的函数,它接受一个列表,并返回其中元素被打乱后的新列表。

这是我目前的代码:

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
>>>

在循环之前不需要初始化迭代变量。 - Malik Brahimi
如果IDLE不适合您,请不要使用它。请安装IPython,因为IPython控制台比默认的REPL要好得多。 - Eric Wilson
我会选择Sublime。它更美观,功能也非常强大。 - Malik Brahimi
我必须使用IDLE,因为这是学校的要求。我不喜欢在命令行中调用函数而不是直接按运行键的事实。 - Mozein
5个回答

5

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

2

random.shuffle 是一种原地操作,它不返回任何东西。

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

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

2

random.shuffle是在原地操作的,这意味着它会更新提供的参数,而不是返回一个值(除了默认值None)。在C++中,你需要传递一个列表的引用(例如int** aList),但在Python中,这种区别实际上并不存在。

因此,你实际上是将shuffleList设置为None,然后返回它!

你可以使用print来确认完成后的结果 - 只返回函数的值不会输出任何内容,据我所知:

results = shuffle()
print results

要修复它,只需返回 aList,而不是将结果存储在另一个变量中:
random.shuffle(aList)
return aList

2

Shuffle函数将列表打乱顺序,它不会返回新的列表。试试这个:

import random

def shuffle():
    aList = []

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

    random.shuffle(aList)
    return aList

print shuffle()

你正在打印一个不起作用的函数。只返回列表就足够了。我相信这就是问题所在。 - Mozein
我在负评开始出现后加了打印功能,这个方法是有效的。你只是在打印一个列表。 - Malik Brahimi

1

random.shuffle() 方法对列表进行原地重排,并返回 None。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接