以下代码拆分方程式并在对其进行排序后进行组装。
def simplify(poly):
import re
p=re.split('\+|\-',poly)
return '+'.join(sorted(''.join(sorted(x)) for x in p))
print(simplify('a+ca-ab'))
问题:对它们进行排序并不难,但很难将操作员(+, - )放回去,上面的代码只能放回' +&#39 ;但不是' - '回到等式中。
我可以问一下如何将操作员放回去?
答案 0 :(得分:2)
请注意,您的函数名称不适合代码。你只是试图按字典顺序对未知数进行排序。
如果你将未知数和它们的符号分开,处理就会变得一团糟。只需要一起处理它们:
import re
pattern = re.compile('[+-]?[a-z]+', re.I)
def ignore_sign(s):
return re.sub('[+-]', '', s)
def simplify(poly):
if poly[0] not in '+-':
poly = '+' + poly
parts = [''.join(sorted(part)) for part in re.findall(pattern, poly)]
sorted_parts = sorted(parts, key=ignore_sign)
return re.sub('^\+', '', ''.join(sorted_parts))
print(simplify('a-ac+ba'))
# a+ab-ac
字符串前加+
以避免将未知数混合在一起(感谢@rici):
print(simplify('z-ac+ba'))
# ab-ac+z
对零件进行排序时,您只需忽略任何标记,以便在-a
之前显示+z
:
>>> sorted(['-a', '+z'])
['+z', '-a']
>>> sorted(['-a', '+z'], key=ignore_sign)
['-a', '+z']
答案 1 :(得分:0)
试试这个逻辑。它不会删除拆分字符,将其与列表元素保持一致。
import re
def simplify(poly):
original_p = re.split('(\+|\-)',poly)
without_operand = [x for x in original_p if x not in ["+", "-"]]
return "".join(original_p)
print(simplify('a+ca-ab'))