我知道你可以在 python 中做这样的事情:
>>> conditional = False
>>> x = [1 if conditional else 2, 3, 4]
[ 2, 3, 4 ]
但我该怎么做这样的事情?
>>> conditional = False
>>> x = [1 if conditional, 3, 4]
[ 3, 4 ]
也就是说,我不想用1
另一个数字代替。conditional
如果是假的,我想简单地省略它。
使用串联:
x = ([1] if conditional else []) + [3, 4]
换句话说,生成一个包含可选元素或为空的子列表。
演示:
>>> conditional = False
>>> ([1] if conditional else []) + [3, 4]
[3, 4]
>>> conditional = True
>>> ([1] if conditional else []) + [3, 4]
[1, 3, 4]
当然,这个概念也适用于更多元素:
x = ([1, 2, 3] if conditional else []) + [4, 5, 6]
你可以用一片来做
x = [1, 3, 4][not conditional:]
例如
>>> conditional = False
>>> [1, 3, 4][not conditional:]
[3, 4]
>>> conditional = True
>>> [1, 3, 4][not conditional:]
[1, 3, 4]
比 Python 3.5+ 中的https://stackoverflow.com/a/18988829/1093967略快(利用 PEP-448 引入的额外解包泛化):
>>> timeit("([1, 2, 3] if True else []) + [4, 5, 6]")
0.10665618600614835
>>> timeit("[*([1, 2, 3] if True else []), 4, 5, 6]")
0.08992647400009446
如果你真的想避免else
,你可以为列表项编写一个生成器:
def gen_x(conditional):
if conditional:
yield 1
for v in [3, 4]:
yield v
或者,从 Python 3.3 开始:
def gen_x(conditional):
if conditional:
yield 1
yield from [3, 4]
接着:
x = list(gen_x(conditional))