如何在Python中检查字符串是否包含列表中的元素

417 投票
8 回答
639206 浏览
提问于 2025-04-16 20:34

我有这样的代码:

extensionsToCheck = ['.pdf', '.doc', '.xls']

for extension in extensionsToCheck:
    if extension in url_string:
        print(url_string)

我在想,在Python中有没有更优雅的方法来实现这个功能(不使用for循环)?我曾考虑过类似于C/C++的写法,但那并没有成功:

if ('.pdf' or '.doc' or '.xls') in url_string:
    print(url_string)

编辑:我有点被迫解释一下,这个问题和下面那个被标记为潜在重复的问题有什么不同(这样我想它就不会被关闭)。

不同之处在于,我想检查一个字符串是否是某个字符串列表的一部分,而另一个问题是检查一个字符串列表中的字符串是否是另一个字符串的子串。虽然相似,但并不完全相同,我认为在网上寻找答案时,语义是很重要的。这两个问题实际上是在解决相反的问题。不过,两个问题的解决方案却是一样的。

8 个回答

29

正确解析网址是更好的做法,这样你就能正确处理像 http://.../file.doc?foohttp://.../foo.doc/file.exe 这样的链接。

from urlparse import urlparse
import os
path = urlparse(url_string).path
ext = os.path.splitext(path)[1]
if ext in extensionsToCheck:
  print(url_string)
83
extensionsToCheck = ('.pdf', '.doc', '.xls')

'test.doc'.endswith(extensionsToCheck)   # returns True

'test.jpg'.endswith(extensionsToCheck)   # returns False

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

745

可以使用生成器和 any 一起,这样在找到第一个为真的情况时就会停止检查:

if any(ext in url_string for ext in extensionsToCheck):
    print(url_string)

编辑:我看到这个答案已经被提问者接受了。虽然我的解决方案可能对他的问题“足够好”,并且是检查列表中是否有字符串出现在另一个字符串中的一种好方法,但请记住,这个解决方案仅仅是做这个。它并不关心字符串出现的位置,比如是在字符串的结尾。 如果这个位置很重要,比如在处理网址时,建议你查看 @Wladimir Palant 的答案,否则可能会得到错误的结果。

撰写回答