Поиск цифр в строке - PullRequest
1 голос
/ 26 марта 2012

Я очень плохо знаком с Python и у меня проблемы со следующим фрагментом кода.Цель состоит в том, чтобы создать функцию, которая печатает все целые числа в строке.

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

Однако она возвращает только первое целое число в строке, и я не уверен, как заставить его печатать всеих.

Приношу свои извинения, если вопрос глупый, я некоторое время осматривался на этом сайте и на других и не смог разобраться.

Ответы [ 9 ]

3 голосов
/ 26 марта 2012

Сжатый в понимание списка

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
2 голосов
/ 26 марта 2012

Всякий раз, когда вы возвращаетесь из функции, функция прекращает выполнение.Я бы порекомендовал генератор , который позволяет вам возвращать итерируемое из функции без написания большого количества кода.

Этот вопрос попахивает домашней работой, поэтому я не собираюсь давать полнуюответ, но я бы порекомендовал посмотреть на этот ответ StackOverflow , чтобы найти отличное объяснение генераторов и ключевого слова yield.

2 голосов
/ 26 марта 2012
>>> 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']
1 голос
/ 26 марта 2012

Ваша функция завершает работу после того, как находит первую цифру.Чтобы он мог вернуть все цифры, соберите результаты в список.

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

Вы также можете упростить свою функцию, используя понимание списка :

def get_digits(str1):
   return [d for d in str1 if d.isdigit()]

Если вы просто хотите распечатать результаты и не возвращать их, замените return i на print i в исходной функции.

1 голос
/ 26 марта 2012

Вы можете перебирать цифры и возвращать их список, например:

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
0 голосов
/ 26 марта 2012
import re
re.findall('\d', str1)
0 голосов
/ 26 марта 2012

Простое объяснение:

# 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()]
0 голосов
/ 26 марта 2012
a=""
def get_digits(str1):
   for i in str1:
      if i.isdigit():
        a=a&i
   return a

попробуй вот так. Потому что вы вернетесь, пока найдете первый цифровой.

0 голосов
/ 26 марта 2012
def get_digits(str1):
   numbers = ""
   for i in str1:
      if i.isdigit():
        numbers = numbers + i
   return numbers
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...