在Python中,询问字符串中是否存在子字符串非常简单:
>>> their_string = 'abracadabra'
>>> our_string = 'cad'
>>> our_string in their_string
True
但是,检查这些相同的字符是否在列表中“
”>>> ours, theirs = map(list, [our_string, their_string])
>>> ours in theirs
False
>>> ours, theirs = map(tuple, [our_string, their_string])
>>> ours in theirs
False
我无法找到任何明显的理由为什么检查有序(甚至不可变)迭代中的元素的行为与不同类型的有序,不可变的可迭代行为不同。
答案 0 :(得分:3)
对于列表和元组等容器类型,x in container
检查x
是否为容器中的项。因此,使用ours in theirs
,Python会检查ours
中的theirs
是否为[['a','b','c'], ...]
中的项,并发现它为False。
请记住,列表可以包含列表。 (例如>>> ours = ['a','b','c']
>>> theirs = [['a','b','c'], 1, 2]
>>> ours in theirs
True
)
{{1}}
答案 1 :(得分:1)
您是否想查看'cad'是否在字符串列表中的任何字符串中?这就像是:
stringsToSearch = ['blah', 'foo', 'bar', 'abracadabra']
if any('cad' in s for s in stringsToSearch):
# 'cad' was in at least one string in the list
else:
# none of the strings in the list contain 'cad'
答案 2 :(得分:1)
从Python文档中,https://docs.python.org/2/library/stdtypes.html获取序列:
x in s True if an item of s is equal to x, else False (1)
x not in s False if an item of s is equal to x, else True (1)
(1) When s is a string or Unicode string object the in and not in operations act like a substring test.
对于用户定义的类,__contains__
方法实现此in
测试。 list
和tuple
实现了基本概念。 string
增加了'substring'的概念。 string
是基本序列中的一个特例。