2016-03-14 56 views
-2

我正在使这个简单的程序从字符串中提取所有数字并将它们放入列表中。当我打印它的输出是:[]。有人能帮我吗?Python:从字符串中提取数字并将数字放入列表中

new = [] 
def extract_nums(string): 
    trash = [] 
    for x in string: 
     if x.isalpha: 
      trash.append(x) 
     else: 
      new.append(x) 
extract_nums("hello 123") 
print new 
+3

既然你'print' ** **之前调用该函数,*地球上能有什么办法?!* – jonrsharpe

+0

只需将打印到下一行没有新的,它应该工作,你所希望的方式。 – Trey50Daniel

+0

对不起事故... – drewteriyaki

回答

0

您的代码的主要问题是isalpha()需要括号。这里是代码固定:

new = [] 
def extract_nums(string): 
    trash = [] 
    for x in string: 
     if x.isalpha(): # added parentheses 
      trash.append(x) 
     else: 
      new.append(x) 

extract_nums("hello 123") 
print(new) 

一个更好的想法完全是使用isnumeric()提取的数字是这样的:

new = [] 
def extract_nums(string): 
    for x in string: 
     if x.isnumeric(): 
      new.append(x) 

extract_nums("hello 123") 
print(new) 

的原因,二是更好的是,因为第一个会输出空白和其他字符实际上不是数字。如果您只想要数字,请使用第二种方法。

+0

我只是试图运行它,并说:“ISNUMERIC不一个东西”。 – drewteriyaki

+0

也许这可能是蟒蛇2.x和3.x之间的区别? – Ilja

-1

我找到了正确的答案。

new = [] 
def extract_nums(string): 
    trash = [] 
    for x in string: 
     if x.isalpha(): 
      trash.append(x) 
     elif x == ' ': 
      trash.append(x) 
     else: 
      new.append(x) 
extract_nums("hello 123") 
print (new) 
+0

这样做的问题是,字符,例如@,#,$ {等仍然会在列表中的函数运行之后。至于使用列表理解,你的答案也不使用列表理解。 – MarkyPython

0

你想要一个字符串列表,还是将它们转换为数字?在这种情况下,使用try应该是最优雅,解决这两个问题(我的意思是,删除一切,是不是数字,并将其转换)

new = [] 
def extract_nums(string): 
    for x in string: 
     try: 
      new.append(int(x))    
     except ValueError: 
      continue 

extract_nums("hello 123") 
print(new) 

我修改你的代码尽可能少。