如何从Python 2.7中用空格分隔的字符串中提取整数?

时间:2015-02-05 06:45:26

标签: python python-2.7

我想从一个字符串中提取整数,其中整数由空格分隔,即' &#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:

并在每个输入字符串的末尾放置一个空格。请告知我哪里出错?

4 个答案:

答案 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]

以下是它正在做的事情的细分:

  • 假设 myOtherList 是一个包含一定数量元素的列表,
  • 然后我们将暂时将一个元素存储为 x
  • 我们将对 myOtherList
  • 中的每个元素执行一些操作
  • 假设我们执行的这个操作有一些返回值,
    • 然后返回的值将作为元素存储在我们正在创建的新列表中
  • 最终结果是我们将填充一个新列表 myNewList ,这与 myOtherList
  • 的长度完全相同

具体而言,在您的情况下:

myIntegers = [int(x) for x in I.split()]    

执行以下操作:

  • 我们看到I.split()返回[“1”,“15”,“163”,“132”]
  • 对于每个字符串元素,只需将它们转换为整数
  • 即可
  • 并将该整数存储为新列表中的元素。

有关详细信息,请参阅官方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(' '))