如何简化Python列表推导式中排除多元素的判断条件?
列表推导式过滤元素的简洁写法
问题背景
现有一段可正常运行的Python代码,用于过滤列表中**既不包含'a'也不包含'b'**的元素:
xlist = ['a', 'b', 'c'] xlist[:] = [x for x in xlist if ('a' not in x) & ('b' not in x)]
尝试了以下写法但未成功:
xlist[:] = [x for x in xlist if ['a', 'b'] not in x]
想知道有没有更简洁的条件组合方式。
错误写法原因
['a', 'b'] not in x的逻辑是判断整个列表是否是x的子元素,但x是单个字符串,这个条件永远为True,自然达不到过滤效果。
几种简洁的优化写法
- 使用
all()函数:扩展性强,后续要添加过滤字符只需修改列表xlist[:] = [x for x in xlist if all(char not in x for char in ['a', 'b'])] - 使用集合交集判断:利用集合运算快速判断是否有重叠字符
也可以写成更直观的方法调用形式:xlist[:] = [x for x in xlist if not set(x) & {'a', 'b'}]xlist[:] = [x for x in xlist if not set(x).intersection({'a', 'b'})] - 使用
not any()逻辑:反向判断不存在目标字符xlist[:] = [x for x in xlist if not any(char in x for char in ['a', 'b'])]
内容的提问来源于stack exchange,提问作者NonSleeper
相关产品推荐
相关产品推荐

