在Python中检查一个字符串是否不含有给定子字符串列表中的任意一个子字符串

6

我正在尝试实现以下逻辑:

bitmap_id = 'HelloWorld'
if 'SLIDE' not in bitmap_id and 'ICON' not in bitmap_id  and 'BOT' not in bitmap_id:
    print bitmap_id

如果bitmap_id是'ICON_helloworld',那么就不应该打印任何信息。我相信大家都会认为这太长了,而且看起来很难看,所以我试图像下面展示的那样做,但它没有起作用。
if any(s not in bitmap_id for s in ['SLIDE', 'ICON', 'BOT']):
    print bitmap_id

我做错了什么?

你尝试过在命令行之外声明表格,然后只需为表格中的每个字符串创建一个 for 循环吗? - Peut22
1
在我看来,你的第一个语句使用了“and”,但第二个语句中有一个隐含的“or”。 - ypnos
@ypnos非常感谢你的提示,我是Python的新手,之前不知道all()函数:) 你的评论让我很快找到了答案。 - sayo9394
3个回答

15

使用任何一个

if all(s not in bitmap_id for s in ['SLIDE', 'ICON', 'BOT']):
     print bitmap_id
或者
if not any(s in bitmap_id for s in ['SLIDE', 'ICON', 'BOT']):
    print bitmap_id

3

您实际上需要:

if all(s not in bitmap_id for s in ['SLIDE', 'ICON', 'BOT']):
    print bitmap_id

if any 只有当所有字符串都在 bitmap_id 中时才会为 false,例如 'bitmap_id = 'ICON_SLIDE_BOT'。你需要相反的情况,即没有任何一个字符串存在或所有字符串都不存在。


你们在 DeepSpace 上提供的答案比我晚一分钟就出来了!很抱歉我回复晚了!实际上,你们回答得太快了,我不得不等待才能接受!谢谢! - sayo9394
2
@sayo9394,我其实更喜欢他的回答,他有两个选项。 - Andrey

2
你可以像这样做:

你可以这样做:

bitmap_id = 'HelloWorld'
blacklist = ['SLIDE', 'ICON', 'BOT']
if not filter(lambda x: x in bitmap_id, blacklist):
    print bitmap_id

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接