簡體   English   中英

在字符串中查找數字

[英]Finding Digits in a String

我是python的新手,並且在以下代碼方面遇到了麻煩。 目的是創建一個輸出字符串中所有整數的函數。

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

但是,它僅返回字符串中的第一個整數,我不確定如何獲取它以打印所有整數。

如果這個問題很愚蠢,我深表歉意,我已經在這個網站和其他網站上閑逛了一陣子,還沒有解決。

濃縮成列表理解

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
>>> 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']

無論何時從函數返回,函數都會停止執行。 我會在這里推薦一個生成器 ,它使您無需編寫太多代碼即可從函數返回可迭代的對象。

這個問題有點家庭作業,因此我將不給出完整答案,但是我建議您查看此StackOverflow答案 ,以獲取有關生成器和yield關鍵字的詳細說明。

您可以遍歷數字並返回它們的列表,如下所示:

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

找到第一個數字后,函數將退出。 為了使其返回所有數字,請將結果收集在列表中。

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

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

簡單說明:

# 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()]
import re
re.findall('\d', str1)
a=""
def get_digits(str1):
   for i in str1:
      if i.isdigit():
        a=a&i
   return a

這樣嘗試。 因為您在找到第一個數字的同時返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM