Python条件插入元素

时间:2019-05-15 13:41:31

标签: python list

我正在尝试列出一个基于条件的元素,该元素可能存在或可能不存在。例如,如果为true,则列表为[1, 2, 3],否则为[1, 3]。当前,我可以做的是初始化列表并分别调用.insert.append元素,或者可以执行类似[1] + ([2] if condition else []) + [3]的操作,但这很丑。

我想知道是否有某种语法,例如[1, 2 if condition, 3],但是我似乎找不到任何这种语法。有类似的语法吗?

编辑,我的列表不是[1, 2, 3]。我想要任何类型的对象的通用解决方案,因为我什至不使用数字(这些是WTForms验证器)

3 个答案:

答案 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)]