python 字符串形式的列表转列表

2016-12-27 09:08:32 +08:00
 scriptkid

RT, 假设有列表 a = [1, 2, 3, 4],那么可以用 str(a)转成字符串 '[1,2,3,4]'
现在反过来想把字符串'[1,2,3,4]'转换成列表[1,2,3,4],有什么好的办法吗
拒绝 eval ,毕竟危险函数,最好是类似 json 这样的

13087 次点击
所在节点    Python
8 条回复
billion
2016-12-27 09:14:52 +08:00
```
>>> import json
>>> a = '[1,2,2]'
>>> b = json.loads(a)
>>> b
[1, 2, 2]
```
Mistwave
2016-12-27 10:55:05 +08:00
>>> a = '[1,2,2]'
>>> b = list(a)[1::2]
>>> b
['1', '2', '2']

如果有空格,可以先 split 然后 join 去空格(逃









还是用 json 吧
glasslion
2016-12-27 10:59:11 +08:00
ast. literal_eval safe
wyntergreg
2016-12-27 11:19:44 +08:00
a = '[1, 2, 3, 4]'.strip('[').strip(']').split(',')
Kisesy
2016-12-27 11:21:16 +08:00
eval 确实是危险函数,但是有几个人能写出让它危险的代码来,就你这个还怕危险。。。
tumbzzc
2016-12-27 11:39:03 +08:00
eval 虽然 evil ,但是只是将字符串转为 list 的话有多危险??
hugo775128583
2016-12-27 12:29:31 +08:00
@glasslion 正解
scriptkid
2016-12-27 16:26:22 +08:00
@Kisesy
@tumbzzc
这里只是举个例子说明想要实现的是将传入字符串转为列表
但程序并不会总是照着我们的想法来
想象下如果传入的字符串是 “__import__('os').system('xxx')” 是什么后果
最后还是很感谢回答
@glasslion 给出了很好的答案

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

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

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

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

© 2021 V2EX