在我要编写的代码中,我想将包含数字的字符串转换为列表,其中每个元素都是该字符串的数字。
我尝试使用sub
这个re
函数,但是在特定情况下我没有想要的结果。
x = "8 1 2 9 12"
liste= []
final = []
for s in x:
liste.append(re.sub('\s+',"", s))
for element in liste:
if element =="":
liste.remove("")
for b in liste:
if b != 'X':
final += [int(b)]
else:
final+=["X"]
我希望输出[8,1,2,9,12]
,但实际输出是[8,1,2,9,1,2]
。
答案 0 :(得分:5)
您可以使用拆分和转换非常轻松地完成此操作。 使用此方法的必要条件是,字符串只能包含数字和空格,并且不能包含其他字符。
>>> li = "8 1 2 9 12"
>>> result = [int(i) for i in li.split(' ')]
>>> print(result)
[8, 1, 2, 9, 12]
现在,继续执行您的实现,在第一个for循环for s in x:
内,对字符串进行迭代。因此,s取以下值:
>>> for s in x:
... print(s)
...
8
1
2
9
1
2
当手动检查字符串时,这将创建6个整数值,实际上是5。这是导致您未获得预期结果的主要原因。
如果该字符串应类似于x =“ 12345”,则它将返回[1,2,3,4,5],这是错误的。
答案 1 :(得分:3)
只有空格和数字时才需要使用分割方法
x = "8 1 2 9 12"
print([int(i) for i in x.split()])
output:
[8, 1, 2, 9, 12]
答案 2 :(得分:1)
上一个答案对您来说是最佳做法,但我也建议您考虑使用另一种方式:Regular Expression
>>>import re
>>>x = "8 1 2 9 12"
>>>list(map(int, re.findall(r'\d+', x)))
[8, 1, 2, 9, 12]