一、任务分析
假设有一个系统,系统中只能有一级模块,也即只能是一维。
若用列表表示,就是sys = ['a', 'b' ,'c' ,'d' ,'e'];对于sys = [['a', 'b'], ['c' ,'d']]是不允许存在的。
现在客户想在原来的位置重现n次模块b,并且就在后面的位置重现,n是一个可变量,客户指定一个n值,系统就可以相应地发生改变。
二、代码实现
sys = ['a', 'b' ,'c' ,'d' ,'e']
n = 5 # 客户指定的n值,假设为5
sys = ['a', *['b' for i in range(n)], 'c' ,'d' ,'e']
print(sys) # ['a', 'b', 'b', 'b', 'b', 'b', 'c', 'd', 'e']
三、原理讲解
*可以对['b' for i in range(n)]这个列表进行解包,也就是说*['b' for i in range(n)]等价于'b' for i in range(n)。
但是它们又不完全等价,只是输出效果等价;因为显然列表推导式两边必须要有圆括号或中括号封闭,不然就会发生语法错误。