你可以很容易地用
defaultdict
(口述可能对你的多项式更好地表示…
poly = {exp: coeff}
)
from collections import defaultdict
mult = defaultdict(int) # mult[i] will default to 0
for i1, c1 in zip(idx1, coef1):
for i2, c2 in zip(idx2, coef2):
mult[i1 + i2] += c1 * c2
为了你的投入,这给了
mult = defaultdict(<class 'int'>, {10: 1, 8: 5, 9: 2, 7: 10, 5: 3, 3: 15})
然后您可以将其排列到您感兴趣的列表中:
mult_sorted = tuple(sorted(mult.items(), reverse=True))
idx_mult = [item[0] for item in mult_sorted]
# [10, 9, 8, 7, 5, 3]
coeff_mult = [item[1] for item in mult_sorted]
# [1, 2, 5, 10, 3, 15]
这些都没有经过彻底的测试!
减少
for
循环:
from itertools import product
for (i1, c1), (i2, c2) in product(zip(idx1, coef1), zip(idx2, coef2)):
mult[i1 + i2] += c1 * c2