You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对含SymPy符号的数组先排序再进行相似元素分组?

解决方案

可以通过排序+分组的组合操作实现需求,具体步骤如下:

1. 排序数组

由于数组中的元素都是y的倍数,我们可以提取每个表达式的系数作为排序依据,确保按系数从小到大排列:

import sympy as smp
from itertools import groupby

x,y,c,a = smp.symbols('x y c a', real=True)
arr = [5*y, 7*y, 2*y,13*y, 7*y, 2*y]

# 排序:提取与y相乘的系数作为排序key
sorted_arr = sorted(arr, key=lambda expr: expr.as_coeff_Mul()[0])

2. 分组相似元素

使用itertools.groupby对排序后的数组分组,同样以系数作为分组依据(排序后相同元素已连续,可直接分组):

# 分组:将系数相同的元素归为一组
grouped = []
for _, group in groupby(sorted_arr, key=lambda expr: expr.as_coeff_Mul()[0]):
    grouped.append(list(group))

print(grouped)
# 输出:[[2*y, 2*y], [5*y], [7*y, 7*y], [13*y]]

简化写法

也可以将两步合并为一行代码:

grouped = [list(g) for _, g in groupby(sorted(arr, key=lambda e: e.as_coeff_Mul()[0]), key=lambda e: e.as_coeff_Mul()[0])]

关键说明

  • expr.as_coeff_Mul()[0]用于提取表达式中与y相乘的系数(例如2*y会提取出2),保证排序和分组的判断标准一致。
  • itertools.groupby仅对连续的相同元素分组,因此排序是分组的必要前提。

内容的提问来源于stack exchange,提问作者didem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 08:10:02