47

我有一串数字,例如:

example_string = '0, 0, 0, 11, 0, 0, 0, 0, 0, 19, 0, 9, 0, 0, 0, 0, 0, 0, 11'

我想将其转换为列表:

example_list = [0, 0, 0, 11, 0, 0, 0, 0, 0, 19, 0, 9, 0, 0, 0, 0, 0, 0, 11]

我试过类似的东西:

for i in example_string:
    example_list.append(int(example_string[i]))

但这显然不起作用,因为字符串包含空格和逗号。但是,删除它们不是一种选择,因为像“19”这样的数字会被转换为 1 和 9。你能帮我解决这个问题吗?

4

6 回答 6

90

用逗号分割,然后映射到整数:

map(int, example_string.split(','))

或使用列表推导:

[int(s) for s in example_string.split(',')]

如果您想要列表结果,后者效果更好,或者您可以将map()调用包装在list().

这是有效的,因为int()容忍空格:

>>> example_string = '0, 0, 0, 11, 0, 0, 0, 0, 0, 19, 0, 9, 0, 0, 0, 0, 0, 0, 11'
>>> list(map(int, example_string.split(',')))  # Python 3, in Python 2 the list() call is redundant
[0, 0, 0, 11, 0, 0, 0, 0, 0, 19, 0, 9, 0, 0, 0, 0, 0, 0, 11]
>>> [int(s) for s in example_string.split(',')]
[0, 0, 0, 11, 0, 0, 0, 0, 0, 19, 0, 9, 0, 0, 0, 0, 0, 0, 11]

仅用逗号分割也更能容忍可变输入;在值之间使用 0、1 或 10 个空格都没有关系。

于 2013-10-12T12:52:46.637 回答
12

我想最肮脏的解决方案是这样的:

list(eval('0, 0, 0, 11, 0, 0, 0, 11'))
于 2013-10-12T12:55:19.120 回答
7

它应该工作

example_string = '0, 0, 0, 11, 0, 0, 0, 0, 0, 19, 0, 9, 0, 0, 0, 0, 0, 0, 11'
example_list = [int(k) for k in example_string.split(',')]
于 2013-10-12T12:53:12.323 回答
7
number_string = '0, 0, 0, 11, 0, 0, 0, 0, 0, 19, 0, 9, 0, 0, 0, 0, 0, 0, 11'

number_string = number_string.split(',')

number_string = [int(i) for i in number_string]
于 2014-10-08T15:12:24.537 回答
6

您还可以对拆分的字符串使用列表推导

[ int(x) for x in example_string.split(',') ]
于 2013-10-12T12:53:23.567 回答
2

试试这个 :

import re
[int(s) for s in re.split('[\s,]+',example_string)]
于 2013-10-12T12:54:41.660 回答