首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么random.choice需要一个列表

为什么random.choice需要一个列表
EN

Stack Overflow用户
提问于 2013-06-11 23:12:03
回答 7查看 2.8K关注 0票数 12

这可能是一个非常直截了当的问题,但想要一个简单的解释为什么?

下面的代码需要一个列表才能获得随机卡。

代码语言:javascript
运行
复制
 import random
 card = random.choice (["hearts", "clubs", "frogs"])

我不明白为什么它需要一个列表,为什么我不能这样做。

代码语言:javascript
运行
复制
import = random
card = random.choice("hearts" , "clubs", "frogs")

我很好,我做不到,我只是想知道为什么?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-06-11 23:14:07

因为,第一个片段

代码语言:javascript
运行
复制
["hearts","clubs","frogs"]

仅向函数发送一个参数(列表)

而第二个函数向函数发送三个字符串。函数choice被配置为只接受一个参数。因此,您必须将其作为列表或任何可索引的内容发送,以便它选择一个随机索引来返回值

票数 7
EN

Stack Overflow用户

发布于 2013-06-11 23:14:50

因为墨菲定律:任何可以以错误的方式完成的事情,总有一天会被某人以错误的方式完成。您建议的API将需要

代码语言:javascript
运行
复制
random.choice(*lst)

当要选择的值在列表(或其他序列) lst中时。当有人写下

代码语言:javascript
运行
复制
random.choice(lst)

取而代之的是,他们总是会得到lst,而不是异常。“显式优于隐式”的Python原则则规定我们必须键入一些额外的字符。

(承认,其他人指出的random.choice("foobar")结果可能会让初学者感到惊讶,但一旦您习惯了这种语言,您就会欣赏它的工作方式。)

票数 31
EN

Stack Overflow用户

发布于 2013-06-11 23:13:07

问题是您使用3个参数调用random.choice,而不是使用3个元素调用单个参数。例如,尝试使用random.choice(('one', 'two', 'three'))

任何具有长度和合适的__getitem__ (用于索引)的序列都可以-因为它选择0到len(something)之间的一个数字来选择元素。

因此,如果您愿意,您可以使用元组来代替。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17047608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档