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
css3
V2EX  ›  Python

如何在 list 内通过条件表达式来决定一个值是否存到 list 内?

  •  
  •   css3 · 2020-12-24 16:51:51 +08:00 · 1745 次点击
    这是一个创建于 1430 天前的主题,其中的信息可能已经有所发展或是发生改变。

    aTrue时展示出来,为False时不展示,想学习pythonion(这个词咋写的不会😂)的写法,大概如下,但aTrue会报错,如何改一下呢?

    
    a=None
    
    mylist = [
        1,
        2,
        *(a if a else []),
        4
    ]
    
    # 输出,符合预期
    >>> mylist
    
    [1, 2, 4]
    
    >>> a=1
    
    >>> mylist = [
    ...     1,
    ...     2,
    ...     *(a if a else []),
    ...     4
    ... ]
    
    Traceback (most recent call last):
      File "<stdin>", line 5, in <module>
    TypeError: 'int' object is not iterable
    # 报错,需要 fix 的地方就是这里
    
    # 预期:
    mylist = [1, 2, 1, 4]
    
    10 条回复    2020-12-25 14:10:45 +08:00
    AoEiuV020
        1
    AoEiuV020  
       2020-12-24 16:54:53 +08:00
    不懂 Python, 但其他语言也没见过类似语法,建议分多个语句用普通方法判断添加,
    crs0910
        2
    crs0910  
       2020-12-24 17:04:33 +08:00
    crs0910
        3
    crs0910  
       2020-12-24 17:08:40 +08:00   ❤️ 1
    mylist = [
    ... 1,
    ... 2,
    ... *([a] if a else []),
    ... 4
    ... ]
    XIVN1987
        4
    XIVN1987  
       2020-12-24 17:11:28 +08:00
    前面正常写,,后面再处理一步不行吗?
    mylist = [
    1,
    2,
    a,
    4
    ]

    mylist = [x for x in mylist if x]
    css3
        5
    css3  
    OP
       2020-12-24 17:11:46 +08:00
    @crs0910 我去,大意了,丢了个括号😂,多谢老哥,成了
    crs0910
        6
    crs0910  
       2020-12-24 17:12:24 +08:00
    不懂 python,看了一下这个'*'就是像 js 里面的 '...',这里展开的应该是一个可迭代的类型,报错也说的挺清楚了
    renmu123
        7
    renmu123  
       2020-12-24 17:20:28 +08:00
    In [2]: a = [1, 23, 4, False, None]

    In [3]: print(list(filter(lambda x: x, a)))
    [1, 23, 4]

    这样应该算比较 pythonic
    lostsquirrelX
        8
    lostsquirrelX  
       2020-12-24 17:29:27 +08:00
    解释一下报错的原因,一个元素的 tuple 要加逗号,

    ```python
    a = (1)
    >>> type(a)
    <class 'int'>

    >>> b = (2,)
    >>> type(b)
    <class 'tuple'>
    ```
    weyou
        9
    weyou  
       2020-12-24 17:37:24 +08:00 via Android
    除了忘记括号,楼主的写法估计是最好的
    nano91
        10
    nano91  
       2020-12-25 14:10:45 +08:00
    不要括号,也不要* 直接写就行了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1092 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:59 · PVG 02:59 · LAX 10:59 · JFK 13:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.