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

2020 年 12 月 24 日
 css3

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]
2159 次点击
所在节点    Python
10 条回复
AoEiuV020
2020 年 12 月 24 日
不懂 Python, 但其他语言也没见过类似语法,建议分多个语句用普通方法判断添加,
catoncat
2020 年 12 月 24 日
catoncat
2020 年 12 月 24 日
mylist = [
... 1,
... 2,
... *([a] if a else []),
... 4
... ]
XIVN1987
2020 年 12 月 24 日
前面正常写,,后面再处理一步不行吗?
mylist = [
1,
2,
a,
4
]

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

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

这样应该算比较 pythonic
lostsquirrelX
2020 年 12 月 24 日
解释一下报错的原因,一个元素的 tuple 要加逗号,

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

>>> b = (2,)
>>> type(b)
<class 'tuple'>
```
weyou
2020 年 12 月 24 日
除了忘记括号,楼主的写法估计是最好的
nano91
2020 年 12 月 25 日
不要括号,也不要* 直接写就行了

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

https://study.congcong.us/t/738653

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

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

© 2021 V2EX