将字符串与列表中所有值进行比较
我正在摸索Python,想学习做事情的最佳方法。我有一个字符串,我正在和另一个字符串进行比较,看看它们是否匹配:
if paid[j].find(d)>=0:
#BLAH BLAH
如果d
是一个列表,最有效的方法是什么,来检查字符串paid[j]
中包含的内容是否与d
中的任何值匹配?
4 个回答
在Python中,你可以使用 in
这个操作符。你可以做一些这样的事情:
>>> "c" in "abc"
True
更进一步,你还可以检查更复杂的结构,比如元组:
>>> (2, 4, 8) in ((1, 2, 3), (2, 4, 8))
True
我猜你是想问 list
而不是 array
吧?在Python中确实有数组这种东西,但大多数情况下你会更想用列表而不是数组。
要检查一个列表里是否包含某个值,可以用 in
这个关键字:
if paid[j] in d:
# ...
如果你只是想知道 d
中的任意一个项目是否包含在 paid[j]
里,正如你所说的那样:
if any(x in paid[j] for x in d): ...
如果你还想知道 d
中哪些项目包含在 paid[j]
里:
contained = [x for x in d if x in paid[j]]
如果 d
中没有任何项目在 paid[j]
里,contained
就会是一个空列表。
如果你想要其他的解决方案,比如获取 d
中第一个包含在 paid[j]
里的项目(如果没有项目则返回 None
):
firstone = next((x for x in d if x in paid[j]), None)
顺便提一下,因为你在评论中提到句子和单词,也许你并不一定想要进行 字符串 检查(我所有的例子都是这样做的),因为它们无法考虑单词的边界——例如,每个例子都会说 'cat' 在 'obfuscate' 中(因为 'obfuscate' 包含 'cat' 作为一个子字符串)。为了允许对单词边界的检查,而不仅仅是简单的子字符串检查,你可以有效地使用正则表达式……但我建议你如果需要这个,最好单独提问——这个回答中的所有代码片段,根据你的具体需求,如果你把条件 x in paid[j]
改成更复杂的条件,比如 somere.search(paid[j])
,对于一个合适的正则表达式对象 somere
,都会同样有效。(Python 2.6 或更高版本——在 2.5 及更早版本中有些小差异)。
如果你的意图是其他的,比如获取 d
中满足你条件的项目的一个或所有 索引,对于这些不同的问题也有简单的解决方案……但是,如果你真正需要的和你说的相差太远,我最好就不再猜测了,希望你能进一步澄清;-)。