Python 如何解开数组?

Python 如何解开数组?,python,arrays,list,Python,Arrays,List,我需要为scipy.optimize.minimize的边界条件生成一个列表,它应该如下所示: bonds = [(0., 0.99),(-30, 30),(-30, 30),(0., 30),(0., 30),(-0.99, 0.99), (0., 0.99),(-30, 30),(-30, 30),(0., 30),(0., 30),(-0.99, 0.99), (0., 0.99),(-30, 30),(-30, 30),(0., 30),(0., 30),

我需要为
scipy.optimize.minimize
边界条件生成一个
列表
,它应该如下所示:

bonds = [(0., 0.99),(-30, 30),(-30, 30),(0., 30),(0., 30),(-0.99, 0.99),
        (0., 0.99),(-30, 30),(-30, 30),(0., 30),(0., 30),(-0.99, 0.99),
        (0., 0.99),(-30, 30),(-30, 30),(0., 30),(0., 30),(-0.99, 0.99),]
我想知道有没有什么优雅的方法

我试过:

bonds = [[(0., 0.99),(-30, 30),(-30, 30),(0., 30),(0., 30),(-0.99, 0.99)] for i in range(3)]
但这会产生

[[(0.0, 0.99), (-30, 30), (-30, 30), (0.0, 30), (0.0, 30), (-0.99, 0.99)],
 [(0.0, 0.99), (-30, 30), (-30, 30), (0.0, 30), (0.0, 30), (-0.99, 0.99)],
 [(0.0, 0.99), (-30, 30), (-30, 30), (0.0, 30), (0.0, 30), (-0.99, 0.99)]]
如何删除内部
[]
,以
将内部数组分解为单个数组?或者还有其他好的方法吗

您可以执行以下操作:

bonds = [(0., 0.99),(-30, 30),(-30, 30),(0., 30),(0., 30),(-0.99, 0.99)] * 3

[i用于子列表中的子列表,i用于子列表中的子列表]
其他方式,使用from
itertools
模块:

>>> l = [(0.0, 0.99), (-30, 30), (-30, 30), (0.0, 30), (0.0, 30), (-0.99, 0.99)]
>>> bonds = list(itertools.chain.from_iterable(l*3))
>>> bonds
[0.0, 0.99, -30, 30, -30, 30, 0.0, 30, 0.0, 30, -0.99, 0.99, 0.0, 0.99, -30, 30, -30, 30, 0.0, 30, 0.0, 30, -0.99, 0.99, 0.0, 0.99, -30, 30, -30, 30, 0.0, 30, 0.0, 30, -0.99, 0.99] 
编辑:比较一些表达式的速度,我尝试了以下方法:

$ python3 -mtimeit -s 'l = [(0., 0.99),(-30, 30),(-30, 30),(0., 30),(0., 30),(-0.99, 0.99)]' 'bonds=list(itertools.chain.from_iterable(l*3))'
1000000 loops, best of 3: 1.95 usec per loop
$ python3 -mtimeit -s 'l = [(0., 0.99),(-30, 30),(-30, 30),(0., 30),(0., 30),(-0.99, 0.99)]' 'bonds = l*3'
10000000 loops, best of 3: 0.147 usec per loop
$ python3 -mtimeit -s 'l = [(0., 0.99),(-30, 30),(-30, 30),(0., 30),(0., 30),(-0.99, 0.99)]' 'bonds=list(itertools.chain(l*3))'
1000000 loops, best of 3: 0.859 usec per loop

大家可以注意到,
bonds=l*3
是上述表达式中速度最快的一个。

请为这个代码段添加一些支持文本。解释为什么它能解决OP的问题。帮助其他人理解。不一定是你想要什么,但可以找到一种方法来平展列表。@Reti43,谢谢,这是思考这个问题的另一种方式。我只是一点也没有想到扁平的。