python - 从python中的字符串中进行随机选择时,空字符串是否可以作为字符返回?
问题描述
假设我想从字符串中获取一个随机字符。在我的特定用例中,我想要包中的一个ascii_letters
字符string
:
import string
import random
random.choice(string.ascii_letters)
现在当我检查
"" in string.ascii_letters
>> True
这是否意味着""
将成为 的可能回报之一random.choice
?如果不是,为什么不呢?如果是的话,有没有一种pythonic方法来阻止它的发生?
解决方案
不,随机选择基本上来自一个序列,字符串序列一次给出一个字符,而不是字符之间的空格。这与您没有从以下位置获取空字符串的原因相同:
for ch in "123": print(ch) # gives 1, 2, and 3.
如果choice()
允许返回字符之间的任何零宽度位,则这些位是无穷大的,这意味着从所有意图和目的来看,看到其中一个非零宽度字符的机会为零:-)
您得到的原因True
是if "" in "something"
由于 Python 文档中的注释:
虽然
in
andnot in
操作在一般情况下仅用于简单的包含测试,但一些专门的序列(例如str
,bytes
和bytearray
)也将它们用于子序列测试:>>> "gg" in "eggs" True
字符串中没有单个元素(即字符),但该示例返回 true,与对 的返回相同。那是因为这是子序列测试而不是遏制测试。"eggs"
"gg"
""
如果您愿意,可以使用以下方法对其进行测试:
import random
while random.choice("123") != "":
pass
print("Pax was wrong!")
看看它是否会打印出该声明。
我意识到这不是证据,因为即使是随机数也可能为您提供单个值的无限序列42
(例如)。但它至少支持我的论点:-)
推荐阅读
- go - 如何使用反向代理根据响应标头设置 cookie?
- javascript - 为什么这不在 MySQL 数据库中添加用户 ID?
- jenkins - 是否有任何 Jenkins 插件允许在将代码提升到生产之前手动批准构建?
- r - 如何根据 p 值表获得字母分离以表示显着的最小二乘均值
- keras - Keras 中的 ResNet50v2
- html - 如何在 Angular 8 中显示值显示错误类型错误:无法读取未定义的属性“项目名称”
- unity3d - 为什么 BoxColliders 碰撞不起作用?
- python - 被称为请求的 python 库仅适用于 web url 还是本地 html 文件?
- c# - 如何检测进程是否移动了鼠标光标而不是用户?
- sql - 通过 Oracle 外部表读取 CSV 文件时跳过标题