关于 string→list 的效率对比疑问

2016-05-27 00:57:20 +08:00
 hjq98765
现在有一个 a=“ a,b,c,d,e,f,g ”的以逗号作为分隔符的字符串 a ,想变为 list ,我现在想到了两种办法:
1 、 list_a=a.split(',')
2 、 list_a=eval('['+a+']')
为什么第二种方法的速度会比第一种方法慢很多呢?
3475 次点击
所在节点    Python
11 条回复
msg7086
2016-05-27 01:41:57 +08:00
第一种需要查找字符串
第二种需要准备一个 Python 编译器环境,准备一个执行虚拟机,然后执行这段代码,获取返回值,再销毁之前创建的各种东西。
binux
2016-05-27 01:50:48 +08:00
因为,在代码能成功执行之前,它就需要被切成 list 才能被解释器理解。
SoloCompany
2016-05-27 02:16:31 +08:00
先不说有多奇葩
你真的有验证过第二种方法的执行正确性?
tonyluj
2016-05-27 02:19:06 +08:00
a="'a', 'b', 'c'"
list_a = eval('[' + a + ']')
monkeylyf
2016-05-27 02:55:09 +08:00
你的第二种方法需要给 a, b.. 套上引号. eval 是有安全隐患的, 而且慢. 如果你一定要用的话试试 ast.literal_eval
ayaseangle
2016-05-27 08:29:15 +08:00
第二种方法好牛逼。。。
araraloren
2016-05-27 08:39:54 +08:00
EVAL 这种东西就是很厉害但是不安全。。
leavic
2016-05-27 12:01:03 +08:00
打死我都想不出第二种写法,太奇葩了。。。。
hjq98765
2016-05-27 15:30:05 +08:00
@SoloCompany
@tonyluj
第二种方法对于字母是不可以的,换成数字是可以的,我在主楼有补充
Allianzcortex
2016-05-27 15:41:23 +08:00
EVAL ……楼主你这真是开脑洞,方法 1 是官方推荐的方法,次优的方法应该是用工厂函数:

list_a=list(a.replace(',',''))
franklinyu
2016-05-28 08:48:43 +08:00
審查代碼,看到 eval 先說一句 fuck 。另外一樓是正解。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/281562

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX