为什么字符串中的任何有序字符看起来都是与该字符串等效的列表的一部分



我的书说——

字符串

和列表实际上是相似的,如果您将字符串视为单个文本字符的"列表"。

假设我有一个字符串,即 name=Zophie .

现在这个字符串应该与列表有一些相似之处。所以我输入另一个代码,告诉我该列表中的项目应该是什么。代码是这样的——

for i in name: print(‘* * * ‘ + i + ‘ * * *')

输出为:

* * * Z * * * * * * o * * * * * * p * * * * * * h * * * * * * i * * * * * * e * * *

这清楚地表明name的列表项是Z,o,p,h,i,e。

现在,如果我尝试使用以下方法检查列表是否’Zop'项目:

Zop in name

它返回真!也就是说,Python 说 Zophie 包含一个名为 ’Zop’ 的项目,但是当我尝试使用 for 命令列出所有项目时,Zop没有出现。

这是怎么回事?

有两种不同的in

  • for i in name:单词infor循环语法的一部分。该语句迭代了可迭代name的元素。如果name是字符串,则它会遍历字符串的字符。

  • 'Zop' in name:单词in是一个比较运算符。从文档中,5.9.1 成员资格测试操作:

    对于字符串和字节类型,当且仅当xy 的子字符串时,x in y True。等效测试是 y.find(x) != -1 。空字符串始终被视为任何其他字符串的子字符串,因此"" in "abc"将返回True

任何 Python 类都可以自由定义各种操作。字符串碰巧实现了序列协议(意味着迭代和[i]项访问的行为与列表相同(,但也实现了负责x in y检查的__contains__来查找子字符串而不仅仅是单个字符。

x in y成员资格测试通常意味着"如果你打印y的所有元素,x就会出现",但没有规则说必须如此。

查看成员资格测试详细信息部分,该部分与in关键字相关。从那里转述,

对于字符串和字节类型,True x in y当且仅当 x 是 y 的子字符串。等效测试是y.find(x) != -1 。空字符串 始终被视为任何其他字符串的子字符串,因此"" in "abc"将返回True

虽然,我强烈建议可以在子字符串的成员资格测试中选择re模块的优雅使用。

最新更新