我是Python新手,想知道将形式为"[1 2 3]"
的字符串转换为列表的最优雅的方法是什么?如果字符串包含以逗号分隔的值列表,则解决方案很简单:
str = "['x', 'y', 'z']"
arr = eval(str)
print isinstance(arr, list) # True
但是,如果字符串中的列表不是逗号分隔的,例如"['x' 'y' 'z']"
,则此解决方案不起作用。你知道吗
有没有一种通用的方法来解决这个问题而不必手动解析字符串?解决方案不应依赖于类型,例如"[1 2 3]"
和"['multiple words 1' 'multiple words 2']"
都应正常转换。你知道吗
第一个明显的步骤是去掉
[...]
,因为它们不会给结果添加任何有用的内容。。。你知道吗由于
findall
中的正则表达式,它可以工作:它只匹配引号之间的任何内容或任何非空格序列。你知道吗我们不想要引用本身(或者我们?–它没有指定),所以regex分组允许它只返回内部部分。你知道吗
然后我们总是得到一个空元素和一个填充元素的成对(
('', '1')
,('', '2')
等等),所以我们需要一个额外的清洗循环。你知道吗这段代码看不到
[1 2 3]
和['1' '2' '3']
之间的区别,但这不是问题,因为问题中没有指定这样的变量。你知道吗在这种情况下,shlex可能是一个解决方案。你知道吗
但你得检查它是否符合你的要求。你知道吗
相关问题 更多 >
编程相关推荐