我正在尝试列出一个基于条件的元素,该元素可能存在或可能不存在。例如,如果为true,则列表为[1, 2, 3]
,否则为[1, 3]
。当前,我可以做的是初始化列表并分别调用.insert
或.append
元素,或者可以执行类似[1] + ([2] if condition else []) + [3]
的操作,但这很丑。
我想知道是否有某种语法,例如[1, 2 if condition, 3]
,但是我似乎找不到任何这种语法。有类似的语法吗?
编辑,我的列表不是[1, 2, 3]
。我想要任何类型的对象的通用解决方案,因为我什至不使用数字(这些是WTForms验证器)
答案 0 :(得分:3)
您可以使用条件创建列表并使用列表理解:
condition = [True, False, True, True, False]
[i for i in range(len(condition)) if condition[i]]
答案 1 :(得分:2)
如果您有所有元素的竞争清单,可以这样做:
elems = ['a', 'b', 'c']
conditions = [True, False, True]
lst = [item for item, condition in zip(elems, conditions) if condition]
print(lst)
也可以使用itertools.compress
来完成:
from itertools import compress
elems = ['a', 'b', 'c']
conditions = [True, False, True]
lst = list(compress(elems, conditions))
或者您生成列表并随后删除该元素:
lst = ['a', 'b', 'c']
if condition:
lst.remove('b')
答案 2 :(得分:0)
这是您要找的吗?
[i for i in range(1,4) if i!=2]
更新:基于上面的好答案。
使条件而不是列表成为条件将使其通用化。
def condition(x):
if(x==2):
return False
else:
return True
[i for i in range(1,4) if condition(i)]