我想从一个字符串中提取整数,其中整数由空格分隔,即' &#39 ;.我怎么能这样做?
输入
I='1 15 163 132'
结果:
[1,15,163,132]
所以我写了一个像这样的函数
def getIt(aStr):
collect = []
i=0
while i < len(aStr):
print('i = ' + str(i))
if aStr[i]!=' ':
j=0
while aStr[i+j]!=' ' or (i+j)<=len(aStr)-1:
print('j = '+str(j))
j+=1
if i+j==len(aStr):
collect.append(int(aStr[i:i+j-1]))
else:
collect.append(int(aStr[i:i+j]))
i+=j+1
else:
i+=1
return collect
当我删除条件时代码运行完美
while aStr[i+j]!=' ':# or (i+j)<=len(aStr)-1:
并在每个输入字符串的末尾放置一个空格。请告知我哪里出错?
答案 0 :(得分:6)
试试这段代码:
myIntegers = [int(x) for x in I.split()]
<强>说明强>
s 是您要拆分的字符串, a 是您要用作分隔符的字符串。然后:
s.Split(a)
在发生 a 的那些点处拆分字符串 s ,并返回已拆分的子字符串列表。
如果没有提供参数,例如: s.Split() 然后它默认使用空格(例如空格,制表符,换行符)作为分隔符。
具体而言,在您的情况下:
I = '1 15 163 132'
I = I.split()
print(I)
[“1”,“15”,“163”,“132”]
它创建一个字符串列表,在特定示例中有空格的点处分隔。
这是官方的python documentation on the string split() method。
现在我们使用所谓的 List Comprehensions 将列表中的每个元素转换为整数。
myNewList = [operation for x in myOtherList]
以下是它正在做的事情的细分:
具体而言,在您的情况下:
myIntegers = [int(x) for x in I.split()]
执行以下操作:
有关详细信息,请参阅官方python documentation on List Comprehensions。
希望这会对你有所帮助。
答案 1 :(得分:1)
你可以这样做,
>>> import re
>>> I='bar 1 15 foo 163 132 foo bar'
>>> [int(i) for i in I.split() if re.match(r'^\d+$', i)]
[1, 15, 163, 132]
没有正则表达式:
>>> I='bar 1 15 foo 163 132 foo bar'
>>> [int(i) for i in I.split() if i.isdigit()]
[1, 15, 163, 132]
i.isdigit()
仅对仅包含数字的字符串返回true。
答案 2 :(得分:0)
import re
x="1 15 163 132"
print re.findall(r"[+-]?\d+(?:\.\d+)?",x)
如果你只有正整数,你可以简单地做
print re.findall(r"\d+",x)
[1, 15, 163, 132]
答案 3 :(得分:0)
请尝试以下方法: -
I='1 15 163 132'
map(int, a.split(' '))