列出一级“拆箱”

时间:2019-09-18 21:11:16

标签: python sympy

我有一个返回Sympy点的函数:

result = [Point3D(500, 500, 10), Point3D(-500, 500, 10), Point3D(-500, -500, 10), Point3D(500, -500, 10)]

但是我需要获取点的值,而不是点实例,所以我这样做:

a, b, c, d = [], [], [], []
for i in range(3):
    a.append(result[0][i])
for i in range(3):
    b.append(result[1][i])
for i in range(3):
    c.append(result[2][i])
for i in range(3):
    d.append(result[3][i])

# And then pack it:
result = [tuple(a), tuple(b), tuple(c), tuple(d)]

我知道这是获取所需输入的一种可怕方法,即:

result = [(500, 500, 10), (-500, 500, 10), (-500, -500, 10), (500, -500, 10)]

我怎样才能做得更好?

2 个答案:

答案 0 :(得分:1)

使用列表理解:

result = [tuple([p[0], p[1], p[2]]) for p in result]

我刚刚查看了Point3D的文档,看来您可以找到一个更优雅的解决方案:

result = [tuple([p.x, p.y, p.z]) for p in result]

或者就像@OscarBenjamin在评论中指出的那样,这可能是最简单的解决方案,您可以使用:

result = [p.args for p in result]

答案 1 :(得分:0)

小注释:(我)已向sympy的point类添加了一个新方法,该方法返回该点的所有坐标:

result = [p.coordinates for p in result]