对象列表

时间:2017-01-16 23:22:46

标签: python matrix infix-notation infix-operator

我在jupyter笔记本中使用库进行数学优化(PICOS)。

在PICOS中,符号//&是用于垂直和水平串联的中缀运算符,用于构建块之外的矩阵。请注意,我不能使用numpy.bmat,因为块不是numpy对象。

如果我有一个块列表,比如[A,B,C],我会通过将它们水平连接到符号A & B & C来形成一个矩阵。当列表包含数百个符号并且我无法手动构建矩阵时,会出现问题。是否有一种简单的方法可以在列表中的每个符号之间插入中缀?

3 个答案:

答案 0 :(得分:0)

'&'.join([A,B,C])

' & '.join([A,B,C])

如果您想要&

之间的空格

编辑:

还将其包装在eval

eval(' & '.join([A,B,C]))

答案 1 :(得分:0)

我应该不那么草率。我只是用递归函数做到了:

def concat_horizontal(lst):
if len(lst) == 2:
    return lst[0] & lst[1]
else:
    return concat_horizontal([lst[0] & lst[1]] + lst[2:]) 

和垂直连接的类似之一。是的,递归!

答案 2 :(得分:0)

使用内置的reduce元函数(Python 2.7 docuPython 3 docu)和代表&中缀运算符的operators.and_(a, b)作为两个参数的函数:

from functools import reduce
from operators import and_

def concat_horizontal(iterable_of_affine_expressions):
    return reduce(and_, iterable_of_affine_expressions)