查找字符串中的数字

时间:2012-03-26 05:27:19

标签: python string loops printing

我是python的新手,并且遇到以下代码问题。目的是创建一个打印字符串中所有整数的函数。

def get_digits(str1):
   for i in str1:
      if i.isdigit():
        return i

然而它只返回字符串中的第一个整数,我不确定如何让它打印所有这些整数。

如果这个问题很愚蠢我很抱歉,我已经在这个网站和其他网站上看了一会儿,但却无法解决这个问题。

9 个答案:

答案 0 :(得分:3)

简化为列表理解

def get_digits(strval):
    return [i for i in strval if i.isdigit()]

print get_digits('432jfsd5fs')
print ''.join(get_digits('432jfsd5fs'))

返回

['4', '3', '2', '5']
4325

答案 1 :(得分:2)

>>> def print_digits(str1):
...    for i in str1:
...       if i.isdigit():
...           print i
... 
>>> print_digits("a12b3")
1
2
3

print打印东西。 return将答案发送回运行该函数的任何内容。我想你会混淆两者,因为如果你在python中运行一个函数,它会打印返回的内容。但这只是因为python试图提供帮助并向您展示结果;这不是你通常打印的方式。

如果你真的想要返回数字,并将它们打印到别处,那么一种方法是建立一个结果列表:

>>> def get_digits(str1):
...    results = []
...    for i in str1:
...       if i.isdigit():
...          results.append(i)
...    return results
... 
>>> print(get_digits("a12b3"))
['1', '2', '3']

答案 2 :(得分:2)

无论何时从函数返回,函数都会停止执行。我建议在这里generator,它允许你从一个函数返回一个迭代,而不需要编写太多的代码。

这个问题涉及到家庭作业,所以我不打算给出完整的答案,但我建议您查看this StackOverflow answer以获取有关生成器和yield关键字的详细说明。

答案 3 :(得分:1)

你可以遍历数字并返回它们的列表,如下所示:

def get_digits(str1):
   digits = [] # define new list
   for i in str1:
      if i.isdigit():
        digitis.append(i) # i is a digit, append to list
   return digits # return the list of digits

答案 4 :(得分:1)

您的功能在找到第一个数字后退出。为了使其返回所有数字,请将结果收集到列表中。

def get_digits(str1):
   digits = []
   for i in str1:
      if i.isdigit():
        digits.append(i)
   return digits

您还可以使用list comprehension

来简化您的功能
def get_digits(str1):
   return [d for d in str1 if d.isdigit()]

如果您只想打印结果而不返回结果,请将return i替换为原始功能中的print i

答案 5 :(得分:0)

def get_digits(str1):
   numbers = ""
   for i in str1:
      if i.isdigit():
        numbers = numbers + i
   return numbers

答案 6 :(得分:0)

简单说明:

# your code
def get_digits(str1):
   for i in str1:
      if i.isdigit():
        return i

当函数遇到return i时,它会停止进一步执行,并返回值。


由于其他人已详细解释,我将提供更多解决方案供参考:

#1. Using generator
def get_digits_generator(str1):
    for i in str1:
       if i.isdigit():
           yield i

#2. Returning a list of digits
def get_digits_list(str1):
    list_of_digits = []
    for i in str1:
       if i.isdigit():
           list_of_digits.append(i)
    return list_of_digits

#3. List comprehension
str1 = "asdbh12njasdo29ns"
list_of_digits = [character for character in str1 if character.isdigit()]

答案 7 :(得分:0)

import re
re.findall('\d', str1)

答案 8 :(得分:-3)

a=""
def get_digits(str1):
   for i in str1:
      if i.isdigit():
        a=a&i
   return a

试试这样。因为您在找到第一个数字时返回。