我有以下问题。我想有条件地形成一个列表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"]
答案 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)