为什么要用Python random.shuffle
返回None
?
>>> x = ['foo','bar','black','sheep']
>>> from random import shuffle
>>> print shuffle(x)
None
我如何获得改组后的值而不是None
?
random.shuffle()
更改x列表到位。
就地更改结构的Python API
方法通常返回None,而不是修改后的数据结构。
如果要基于现有列表创建新的随机混排列表,并按顺序保留现有列表,则可以使用random.sample()
输入的完整长度:
x = ['foo', 'bar', 'black', 'sheep']
random.sample(x, len(x))
你还可以将sorted()with random.random()
用于排序键:
shuffled = sorted(x, key=lambda k: random.random())
但这会调用排序(O(NlogN)
操作),而采样到输入长度仅需要O(N)操作(与random.shuffle()
所使用的过程相同,即从收缩池中换出随机值)。
演示:
>>> import random
>>> x = ['foo', 'bar', 'black', 'sheep']
>>> random.sample(x, len(x))
['bar', 'sheep', 'black', 'foo']
>>> sorted(x, key=lambda k: random.random())
['sheep', 'foo', 'black', 'bar']
>>> x
['foo', 'bar', 'black', 'sheep']
问题内容: 为什么要用Python返回? 我如何获得改组后的值而不是? 问题答案: 更改列表 到位 。 在原位更改结构的Python API方法通常返回,而不是修改后的数据结构。 如果要基于现有列表创建 新的 随机混排列表,并按顺序保留现有列表,则可以使用输入的完整长度: 您还可以将with用于排序键: 但这会调用排序(O(NlogN)操作),而采样到输入长度仅需要O(N)操作(与所使用的过程相同
问题内容: 我已经能够验证结果是否为。但是,它不返回列表。为什么? 问题答案: 对列表进行适当排序,即不返回新列表。写吧
问题内容: 不确定此问题是否特定于该语言以及如何在中实现。 问题答案: append是一种变异(破坏性)操作(它会在适当位置修改列表,而不是返回新列表)。进行无损等效的惯用方式append是 回答你的问题,我的猜测是,如果返回新修改的列表,用户可能会认为它是非破坏性的,即他们可能会编写如下代码 并期望成为
运行以下行时: 我以为Python会返回一个错误。 相反,REPL返回: 原因可能是什么?
问题内容: 如果我有包含10个元素的列表: 为什么l [10]返回IndexError,而l [-1]返回0? 如果列表中没有以前的元素,我想做的就是抛出一个错误。 问题答案: 在Python中,负列表索引表示从列表右边开始计数的项(即的简写形式)。 如果发现需要负索引来指示错误,那么您可以简单地检查这种情况并亲自引发异常(或在那里进行处理):
问题内容: 这是简单的代码,我没有得到设置位图的结果,而是得到了null。谁能告诉我我在哪里犯错了? 更新 好的,所以我无法像我想的那样将文本转换为图像。这样呢 这会创建位图吗? 问题答案: 从文档中: 返回 解码的位图;如果无法解码图像,则 返回 null。 字符串“ test”中涉及的字节不是有效的位图,对吗? 如果将文本“ test”保存在名为or 等的文件中,并试图在Windows中打开它