我有一串数字,如下所示:
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]
我尝试了这段代码:
example_list = []
for x in example_string:
example_list.append(int(x))
显然它不起作用,因为字符串包含空格和逗号。然而,即使我删除这些,数字的各个数字也会被转换,给出类似
[0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 9, 0, 9, 0, 0, 0, 0, 0, 0, 1, 1]
的结果。
怎样才能得到想要的结果?
另请参阅:如何将一串空格分隔的数字拆分为整数?。这个问题增加了一个额外的考虑因素:由于
int
可以接受前导和尾随空格,因此有理由仅在 ,
而不是 ,
上进行拆分。
如果您想处理遵循 Python 列表语法的输入 (即带有周围的
[]
),请参阅如何将列表的字符串表示形式转换为列表。
解决这个问题的明显方法是简单任务的常见组合:
但是,根据具体要求,可以通过其他方式解决。对于某些情况,分割步骤本身可能就足够了。除了本机 Python
list
之外,还有其他方法(在此处的一些答案中给出)可以产生不同的输出 - 例如,使用标准库 array.array
或 NumPy 数组。
或者,这个问题可以看作是 如何从 Python 中的字符串中提取数字? .
的特例用逗号分割,然后映射到整数:
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 个空格并不重要。
list(eval('0, 0, 0, 11, 0, 0, 0, 11'))
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]
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(',')]
import re
[int(s) for s in re.split('[\s,]+',example_string)]