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

2020-12-24 16:51:51 +08:00
 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]
1760 次点击
所在节点    Python
10 条回复
AoEiuV020
2020-12-24 16:54:53 +08:00
不懂 Python, 但其他语言也没见过类似语法,建议分多个语句用普通方法判断添加,
crs0910
2020-12-24 17:04:33 +08:00
crs0910
2020-12-24 17:08:40 +08:00
mylist = [
... 1,
... 2,
... *([a] if a else []),
... 4
... ]
XIVN1987
2020-12-24 17:11:28 +08:00
前面正常写,,后面再处理一步不行吗?
mylist = [
1,
2,
a,
4
]

mylist = [x for x in mylist if x]
css3
2020-12-24 17:11:46 +08:00
@crs0910 我去,大意了,丢了个括号😂,多谢老哥,成了
crs0910
2020-12-24 17:12:24 +08:00
不懂 python,看了一下这个'*'就是像 js 里面的 '...',这里展开的应该是一个可迭代的类型,报错也说的挺清楚了
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
2020-12-24 17:29:27 +08:00
解释一下报错的原因,一个元素的 tuple 要加逗号,

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

>>> b = (2,)
>>> type(b)
<class 'tuple'>
```
weyou
2020-12-24 17:37:24 +08:00
除了忘记括号,楼主的写法估计是最好的
nano91
2020-12-25 14:10:45 +08:00
不要括号,也不要* 直接写就行了

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

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

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

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

© 2021 V2EX