所以我要做的是检查字符串是否包含许多选项之一。
假设我有list["bottle", "camera", "cake"]
并且我正在尝试检查字符串是否包含列表中的一个选项。
我知道可以使用
if "bottle" in string...,
但是如何用很少的选项做同样的事情?
我希望我能够清楚地表达我的问题,谢谢!:)
答案 0 :(得分:4)
您可以使用any:
st = "foobar water"
l = ["bottle", "camera", "cake"]
if any(w in st for w in l)
您可能需要进行拆分,以避免foo
foobar
st.split()
等情况
In [10]: st = "foobar bar"
In [11]: "foo" in st
Out[11]: True
In [12]: "foo" in st.split()
Out[12]: False
一旦我们从字符串中的单词列表中找到任何单词, any
就会短路。
答案 1 :(得分:2)
您可以使用set operations:
options = {'bottle', 'camera', 'cake'}
if options.issuperset(given_items_to_test):
# all items in given_items_to_test are found in options
if options.intersection(given_items_to_test):
# at least one item in given_items_to_test is found in options
set.issuperset()
method测试options
是given_items_to_test
的超集,而set.intersection()
method可以用来查看是否至少有一个项目 in来自要测试的项目中使用的options
集合。
即使given_items_to_test
本身不是一个集合,但只是一个列表或元组,这也有效:
>>> options = {'bottle', 'camera', 'cake'}
>>> given_items_to_test = ['bottle']
>>> options.issuperset(given_items_to_test)
True
>>> given_items_to_test = ['bike']
>>> options.issuperset(given_items_to_test)
False
>>> given_items_to_test = ['bottle', 'camera']
>>> options.issuperset(given_items_to_test)
True
>>> given_items_to_test = ['bottle', 'camera', 'bike']
>>> options.issuperset(given_items_to_test)
False
>>> options.intersection(given_items_to_test)
set(['camera', 'bottle'])