字符串与列表成员资格检查

Liv*_*viu 11 python string list

所以我想知道为什么这样:

'alpha' in 'alphanumeric'
Run Code Online (Sandbox Code Playgroud)

True,但是

list('alpha') in list('alphanumeric')
Run Code Online (Sandbox Code Playgroud)

False.

为什么x in s成功时,x是的一个子s,但x in l不会当x是一个子l

the*_*eye 10

当您list对任何iterable 使用函数时,将创建一个新的列表对象,其中来自iterable的所有元素作为列表中的单个元素.

在您的情况下,字符串是有效的Python迭代,所以

>>> list('alpha')
['a', 'l', 'p', 'h', 'a']
>>> list('alphanumeric')
['a', 'l', 'p', 'h', 'a', 'n', 'u', 'm', 'e', 'r', 'i', 'c']
Run Code Online (Sandbox Code Playgroud)

因此,您有效地检查一个列表是否是另一个列表的子列表.

在Python中,只有字符串有in运算符来检查一个字符串是否是另一个字符串的一部分.对于所有其他集合,您只能使用单个成员.引用文档,

运营商innot in测试集合成员资格.x in s如果x是集合的成员,则求值为true,否则求值为sfalse.x not in s回归否定x in s.集合成员资格测试传统上一直与序列绑定; 如果集合是序列并且包含与该对象相等的元素,则对象是集合的成员.但是,许多其他对象类型支持成员资格测试而不是序列是有意义的.特别是,字典(用于键)和集支持成员资格测试.

对于列表和元组类型,x in y当且仅当存在一个指标是真实的i,从而x == y[i]是真实的.

对于Unicode和字符串类型,x in y当且仅当x是子字符串时才为真y.等效测试是y.find(x) != -1.请注意,xy不必是同一类型; 因此,u'ab''abc'将返回True.空字符串总是被认为是其他任何字符串的一个子,所以"""abc"将返回True.