将字符串与列表中所有值进行比较

37 投票
4 回答
169008 浏览
提问于 2025-04-15 22:26

我正在摸索Python,想学习做事情的最佳方法。我有一个字符串,我正在和另一个字符串进行比较,看看它们是否匹配:

if paid[j].find(d)>=0:
    #BLAH BLAH

如果d是一个列表,最有效的方法是什么,来检查字符串paid[j]中包含的内容是否与d中的任何值匹配?

4 个回答

10

在Python中,你可以使用 in 这个操作符。你可以做一些这样的事情:

>>> "c" in "abc"
True

更进一步,你还可以检查更复杂的结构,比如元组:

>>> (2, 4, 8) in ((1, 2, 3), (2, 4, 8))
True
12

我猜你是想问 list 而不是 array 吧?在Python中确实有数组这种东西,但大多数情况下你会更想用列表而不是数组。

要检查一个列表里是否包含某个值,可以用 in 这个关键字:

if paid[j] in d:
    # ...
58

如果你只是想知道 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 中满足你条件的项目的一个或所有 索引,对于这些不同的问题也有简单的解决方案……但是,如果你真正需要的和你说的相差太远,我最好就不再猜测了,希望你能进一步澄清;-)。

撰写回答