如何有条件地创建列表?

时间:2020-01-23 23:20:07

标签: python list if-statement

我有以下问题。我想有条件地形成一个列表a

假设我有一个变量add_string,如果它是True,那么

a = ["a","b","Added String","c"]

其他

a = ["a","b","c"]

什么是最好的方法?我可以按照以下方式进行操作

a = ["a","b","c"]
if add_string:
  a.insert(2,"Added String")

但这不是理想的,因为列表a将来可能会更改,而我将不得不在insert函数中更改索引。我也有一个条件-此添加的字符串应始终在“ b”之后。另一种解决方案是在列表中搜索“ b”,然后在其后插入,但这增加了复杂性并且很丑。

理想情况下,我认为应该是这样

a = ["a","b",if add_string then "Added String","c"]

3 个答案:

答案 0 :(得分:3)

如果在创建a时了解所有值,则可以执行以下操作:

add_string = True
a = ['a', 'b'] + (['Added String'] if add_string else []) + ['c']

输出:

['a', 'b', 'Added String', 'c']

如果您不知道a中的值,则可以使用index'b'中找到a的位置,然后在其后插入字符串:

a = ["a","b","c"]
add_string = True
if add_string:
    a.insert(a.index("b")+1,"Added String")
print(a)

输出:

['a', 'b', 'Added String', 'c']

答案 1 :(得分:3)

a = ["a","b"] + (["Added String"] if add_string else []) + ["c"]

答案 2 :(得分:1)

您可以将不需要的值设置为已知值(例如None),然后使用列表推导将其删除:

add_string = False  # Could be True
unfiltered_list = ["a","b","Added String" if add_string else None,"c"]
a = [x for x in unfiltered_list if x is not None]
print(a)