现在有一个 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
msg7086 May 27, 2016 第一种需要查找字符串
第二种需要准备一个 Python 编译器环境,准备一个执行虚拟机,然后执行这段代码,获取返回值,再销毁之前创建的各种东西。 |
2
binux May 27, 2016
因为,在代码能成功执行之前,它就需要被切成 list 才能被解释器理解。
|
3
SoloCompany May 27, 2016
先不说有多奇葩
你真的有验证过第二种方法的执行正确性? |
4
tonyluj May 27, 2016
a="'a', 'b', 'c'"
list_a = eval('[' + a + ']') |
5
monkeylyf May 27, 2016
你的第二种方法需要给 a, b.. 套上引号. eval 是有安全隐患的, 而且慢. 如果你一定要用的话试试 ast.literal_eval
|
6
ayaseangle May 27, 2016 via Android
第二种方法好牛逼。。。
|
7
araraloren May 27, 2016
EVAL 这种东西就是很厉害但是不安全。。
|
8
leavic May 27, 2016
打死我都想不出第二种写法,太奇葩了。。。。
|
9
hjq98765 OP |
10
Allianzcortex May 27, 2016
EVAL ……楼主你这真是开脑洞,方法 1 是官方推荐的方法,次优的方法应该是用工厂函数:
list_a=list(a.replace(',','')) |
11
franklinyu May 28, 2016
審查代碼,看到 eval 先說一句 fuck 。另外一樓是正解。
|