如何将空格和逗号分隔的数字字符串转换为 int 列表

问题描述 投票:0回答:6

我有一串数字,如下所示:

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 中的字符串中提取数字? .

的特例
python string list integer
6个回答
101
投票

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

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 个空格并不重要。


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

list(eval('0, 0, 0, 11, 0, 0, 0, 11'))
    

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]
    

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(',')]
    

6
投票
您还可以在分割字符串上使用

列表理解

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

2
投票
试试这个:

import re [int(s) for s in re.split('[\s,]+',example_string)]
    
© www.soinside.com 2019 - 2024. All rights reserved.