V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Jackhuang
V2EX  ›  Python

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

  •  
  •   Jackhuang · 2015-08-29 18:29:50 +08:00 · 2598 次点击
    这是一个创建于 3375 天前的主题,其中的信息可能已经有所发展或是发生改变。
    #疑问?列表解析的时候的 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 后,这是什么逻辑。
    5 条回复    2015-08-29 19:05:11 +08:00
    wklken
        1
    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
        2
    wklken  
       2015-08-29 18:49:18 +08:00
    你第一个是三元操作符, 跟列表解析没关系
    列表解析的 if 实在后面的, 起到过滤作用, 不符合条件的就被滤掉了
    Jackhuang
        3
    Jackhuang  
    OP
       2015-08-29 18:50:08 +08:00 via Android
    @wklken 我知道这个区别,
    😂,我想问为啥 if 一会儿在 for 前一会儿在 for 后😂,只是举个例子
    Jackhuang
        4
    Jackhuang  
    OP
       2015-08-29 18:52:35 +08:00 via Android
    @wklken 这种没有道理的‘跳跃语法规定’和 python 的优雅不是背道而行的么?背后是什么逻辑
    Jackhuang
        5
    Jackhuang  
    OP
       2015-08-29 19:05:11 +08:00 via Android
    @wklken 明白了,列表解析的 if 是过滤用,谢谢~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   986 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 19:08 · PVG 03:08 · LAX 11:08 · JFK 14:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.