Edabit 任务没有显示正确的结果

Edabit task doesn't show correct result

我正在做一个简单的任务,需要按表达式结果对列表进行排序,运行此代码:

   def sort_by_answer(lst):
        ans = []
        dict = {}
        for i in lst:
            if 'x' in i:
                i = i.replace('x', '*')
            dict.update({i: eval(i)})
        dict = {k: v for k, v in sorted(dict.items(), key=lambda item: item[1])}
        res = list(dict.keys())
        for i in res:
            if '*' in i:
                i = i.replace('*', 'x')
                ans.append(i)
            else:
                ans.append(i)
        return ans

它检查出来了,但是我正在做这个测试的网站(这里有一个 link 任务(https://edabit.com/challenge/9zf6scCreprSaQAPq)告诉我我的列表没有正确排序,它是, 有人可以帮助我改进此代码或 smth 以便它在每个案例场景中都能正常工作吗?

P.S.

if 'x' in i:
      i = i.replace('x', '*')

这样做是为了让我可以使用 eval 函数,但是网站输入的列表中有 'x' 而不是 '*'..

你可以试试这个。但是在不受信任的字符串上使用 eval 是危险的。

In [63]: a=['1 + 1', '1 + 7', '1 + 5', '1 + 4']

In [69]: def evaluate(_str):
    ...:     return eval(_str.replace('x','*'))

输出

In [70]: sorted(a,key=evaluate)
Out[70]: ['1 + 1', '1 + 4', '1 + 5', '1 + 7']

In [71]: sorted(['4 - 4', '2 - 2', '5 - 5', '10 - 10'],key=evaluate)
Out[71]: ['4 - 4', '2 - 2', '5 - 5', '10 - 10']

In [72]: sorted(['2 + 2', '2 - 2', '2 x 1'],key=evaluate)
Out[72]: ['2 - 2', '2 x 1', '2 + 2']

我认为这不是您的代码的问题,可能他们使用的是 3.6 更旧的东西,它打乱了 dict 的顺序。元组会更安全。

def sort_by_answer(lst):
    string = ','.join(lst).replace('x','*')
    l = string.split(',')
    d = [(k.replace('*','x'), eval(k)) for k in l]
    ans = [expr for expr, value in sorted(d, key = lambda x: x[1])]
    return ans

编辑pythonic:

def sort_by_answer(lst):
    return sorted(lst, key= lambda x: eval(x.replace('x','*')))