我正在做一个简单的任务,需要按表达式结果对列表进行排序并运行此代码:
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)告诉我,我的列表未正确排序),有人可以帮我改进此代码,或者这样可以在每种情况下都可以使用吗?
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):
...: if 'x' in _str:
...: _str=_str.replace('x','*')
...: return eval(_str)
3.6
更旧的内容,并且弄乱了dict的顺序。元组会更安全。