a
为True
时展示出来,为False
时不展示,想学习pythonion
(这个词咋写的不会😂)的写法,大概如下,但a
是True
会报错,如何改一下呢?
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]
1
AoEiuV020 2020-12-24 16:54:53 +08:00
不懂 Python, 但其他语言也没见过类似语法,建议分多个语句用普通方法判断添加,
|
2
crs0910 2020-12-24 17:04:33 +08:00
|
3
crs0910 2020-12-24 17:08:40 +08:00 1
mylist = [
... 1, ... 2, ... *([a] if a else []), ... 4 ... ] |
4
XIVN1987 2020-12-24 17:11:28 +08:00
前面正常写,,后面再处理一步不行吗?
mylist = [ 1, 2, a, 4 ] mylist = [x for x in mylist if x] |
6
crs0910 2020-12-24 17:12:24 +08:00
不懂 python,看了一下这个'*'就是像 js 里面的 '...',这里展开的应该是一个可迭代的类型,报错也说的挺清楚了
|
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 |
8
lostsquirrelX 2020-12-24 17:29:27 +08:00
解释一下报错的原因,一个元素的 tuple 要加逗号,
```python a = (1) >>> type(a) <class 'int'> >>> b = (2,) >>> type(b) <class 'tuple'> ``` |
9
weyou 2020-12-24 17:37:24 +08:00 via Android
除了忘记括号,楼主的写法估计是最好的
|
10
nano91 2020-12-25 14:10:45 +08:00
不要括号,也不要* 直接写就行了
|