搜索字符串中的几个选项(如果... in)

时间:2015-02-17 17:36:35

标签: python

所以我要做的是检查字符串是否包含许多选项之一。 假设我有list["bottle", "camera", "cake"]并且我正在尝试检查字符串是否包含列表中的一个选项。

我知道可以使用

if "bottle" in string...,

但是如何用很少的选项做同样的事情?

我希望我能够清楚地表达我的问题,谢谢!:)

2 个答案:

答案 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测试optionsgiven_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'])