现在有一个 a=“ a,b,c,d,e,f,g ”的以逗号作为分隔符的字符串 a ,想变为 list ,我现在想到了两种办法:
1 、 list_a=a.split(',')
2 、 list_a=eval('['+a+']')
为什么第二种方法的速度会比第一种方法慢很多呢?
1 、 list_a=a.split(',')
2 、 list_a=eval('['+a+']')
为什么第二种方法的速度会比第一种方法慢很多呢?
|
1
第一种需要查找字符串
第二种需要准备一个 Python 编译器环境,准备一个执行虚拟机,然后执行这段代码,获取返回值,再销毁之前创建的各种东西。 |
|
binuxMay 27, 2016
2
因为,在代码能成功执行之前,它就需要被切成 list 才能被解释器理解。
|
|
SoloCompanyMay 27, 2016
3
先不说有多奇葩
你真的有验证过第二种方法的执行正确性? |
|
tonylujMay 27, 2016
4
a="'a', 'b', 'c'"
list_a = eval('[' + a + ']') |
|
monkeylyfMay 27, 2016
5
你的第二种方法需要给 a, b.. 套上引号. eval 是有安全隐患的, 而且慢. 如果你一定要用的话试试 ast.literal_eval
|
|
ayaseangleMay 27, 2016 via Android
6
第二种方法好牛逼。。。
|
|
araralorenMay 27, 2016
7
EVAL 这种东西就是很厉害但是不安全。。
|
|
leavicMay 27, 2016
8
打死我都想不出第二种写法,太奇葩了。。。。
|
|
9
|
|
AllianzcortexMay 27, 2016
10
EVAL ……楼主你这真是开脑洞,方法 1 是官方推荐的方法,次优的方法应该是用工厂函数:
list_a=list(a.replace(',','')) |
|
franklinyuMay 28, 2016
11
審查代碼,看到 eval 先說一句 fuck 。另外一樓是正解。
|