Python列表推导式中双if语句为何合法?其解析逻辑是什么?
列表推导式里写多个if为啥不是语法错误?
Python的列表推导式本来就支持在迭代语句后面加多个if过滤条件,这些条件是逻辑上的「且」关系,得同时满足才能留下元素。
拿你给的代码举例:
message = "ABCABCABCABC" data = [ch for ch in message if ch != 'A' if ch != 'B'] print(data)
这段代码和下面两种写法完全等价:
- 用
and连接条件:
data = [ch for ch in message if ch != 'A' and ch != 'B']
- 展开成普通循环:
data = [] for ch in message: if ch != 'A': if ch != 'B': data.append(ch)
说白了,多个if就是把多层嵌套的判断直接写到推导式里了,Python会按顺序逐个检查条件——先看元素是不是不等于'A',过了这关再看是不是不等于'B',俩条件都满足才会被放进结果列表里,所以最终只会留下所有的'C'。
内容的提问来源于stack exchange,提问作者John Gordon
相关产品推荐
相关产品推荐

