Edabit 任务未显示正确的结果

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


   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

它签出,但我正在做这个测试的网站(这里有一个链接到任务(https://edabit.com/challenge/9zf6scCreprSaQAPq)告诉我,我的列表没有正确排序,这是,有人可以帮我改进这个代码或smth,所以它在每种情况下都有效吗?


附言


if 'x' in i:

      i = i.replace('x', '*')

这样做是为了让我可以使用eval函数,但站点输入在其列表中有“x”而不是“*”。


GCT1015
浏览 93回答 2
2回答

ABOUTYOU

你可以试试这个。但是,在不受信任的字符串上使用是危险的。evalIn [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.6def 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 ansdef sort_by_answer(lst):     return sorted(lst, key= lambda x: eval(x.replace('x','*')))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python