从 sympy 展平输出列表

Flatten output list from sympy

提问人:Stgauss 提问时间:6/3/2023 更新时间:6/3/2023 访问量:80

问:

我正在计算一大堆场景,涉及楼板的几何形状。我需要做的几乎是迭代每个长度达 200 米、厚度达 120 厘米的表壳。我使用 sympy 解决了这个问题。

除了这个烦人的地方,我确信有一个简单的解决方案,但我无法弄清楚。这是我如何生成用于计算的不同方案:

from sympy.utilities.iterables import multiset_combinations,multiset_permutations,iproduct

dims_lw = range(1000,200500,500)
dims_th = range(50,130,10)

dimensions = multiset_combinations(dims_lw,2)
combinations_dim = iproduct(dimensions,dims_th)

对于侧面尺寸,从 1 到 200 的每个可能数字的组合(减少方案数量的组合,因为 10 x 200m 与 200 x 10m 相同)。然后笛卡尔积得到一系列可能厚度的每个组合。

当我看到我正在生成的内容时,我得到这个:print(list(dimensions))

[([1000, 1500], 50), ([1000, 2000], 50), ([1000, 1500], 100), ([1000, 2500], 50), ([1000, 2000], 100) ...]

这就是我想要的。除了我想要的是同样的东西,但没有嵌套列表。(1000, 1500, 50), (1000, 2000, 50) 等等,这样我就不必在以后弄乱了比我需要的更多的索引和子索引。

问题是,如何将我当前的输出变成我想要的输出?还是完全避免我原来的问题?

Python 组合 sympy 嵌套列表

评论


答:

0赞 smichr 6/3/2023 #1

要展平输出,请使用以下函数:flatten

>>> from sympy import flatten
>>> x = [([1,2], 3),([4,5], 6)]
>>> [flatten(i) for i in x]
[[1, 2, 3], [4, 5, 6]]
>>> [tuple(flatten(i)) for i in x]
[(1, 2, 3), (4, 5, 6)]