我的书说 -
如果您认为字符串是单个文本字符的“列表”,则字符串和列表实际上是相似的。
假设我有一个字符串即
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
它返回True!也就是说,Python说Zophie包含一个项目’Zop’
但是当我尝试使用for命令列出所有项目时,Zop
没有出现。
这里发生了什么?
答案 0 :(得分:2)
任何Python类都可以自由定义各种操作,但它喜欢。字符串碰巧实现了序列协议(意味着迭代和[i]
项访问行为与列表相同),但也实现__contains__
,它负责x in y
检查,以查找< em> substrings 而不仅仅是单个字符。
x in y
成员资格测试的常用意味着“如果打印y的所有元素,则会出现x”,但没有规则说有是这样的。
答案 1 :(得分:2)
有两种不同的in
s:
for i in name
:in
这个词是for
-loop syntax的一部分。
该语句迭代可迭代name
的元素。
如果name
是一个字符串,则它会迭代字符串的字符。
'Zop' in name
:单词in
是比较运算符。从文档中5.9.1 Membership test operations:
对于字符串和字节类型,当{且仅
x in y
是True
的子字符串时,x
为y
。等效测试是y.find(x) != -1
。空字符串始终被视为任何其他字符串的子字符串,因此"" in "abc"
将返回True
。
答案 2 :(得分:0)
查看Membership test detail上与in
关键字相关的部分。从那里解释,
对于字符串和字节类型,当{并且仅当x是a时,
x in y
为True
y的子串。等效测试是y.find(x) != -1
。空字符串 始终被视为任何其他字符串的子字符串,因此"" in "abc"
将返回True
。
虽然,我强烈建议可以通过子字符串的成员资格测试来选择re
模块的优雅使用。