Python 的列表解析和三元操作符的一点疑问

2015-08-29 18:29:50 +08:00
 Jackhuang
#疑问?列表解析的时候的 if 到底写在那里,为什么 QAQ
> data = ['http:' + x if x.find ('http:') == -1 else x for x in data ]
这是列表解析配合三元操作符的一个例子吧
而列表解析本身是可以
> data=['http:' + x for x in data if x.find ('http:') == -1]

我查了一下:
> 单独的 if 语句(不带 else )只有在列表解析里或者 lambda 的主体表达式里才能使 用
但是带 else 的 if 语句在任何情况下都可以使用,相当于三元操作符
但是一会儿写在 for 前,一会在 for 后,这是什么逻辑。
2552 次点击
所在节点    Python
5 条回复
wklken
2015-08-29 18:47:47 +08:00
```
>>> data = ['//www.baidu.com', 'http://www.baidu.com']
>>> ['http:' + x if x.find ('http:') == -1 else x for x in data ]
['http://www.baidu.com', 'http://www.baidu.com']
>>> ['http:' + x for x in data if x.find ('http:') == -1]
['http://www.baidu.com']
```
wklken
2015-08-29 18:49:18 +08:00
你第一个是三元操作符, 跟列表解析没关系
列表解析的 if 实在后面的, 起到过滤作用, 不符合条件的就被滤掉了
Jackhuang
2015-08-29 18:50:08 +08:00
@wklken 我知道这个区别,
😂,我想问为啥 if 一会儿在 for 前一会儿在 for 后😂,只是举个例子
Jackhuang
2015-08-29 18:52:35 +08:00
@wklken 这种没有道理的‘跳跃语法规定’和 python 的优雅不是背道而行的么?背后是什么逻辑
Jackhuang
2015-08-29 19:05:11 +08:00
@wklken 明白了,列表解析的 if 是过滤用,谢谢~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/216959

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX