def get_digits(str1):
c = ""
for i in str1:
if i.isdigit():
c += i
return c
以上是我使用的代码,问题是它只返回字符串的第一个数字。为此,我必须同时保留 for 循环和 return 语句。任何人都知道如何修复?
谢谢。
def get_digits(str1):
c = ""
for i in str1:
if i.isdigit():
c += i
return c
以上是我使用的代码,问题是它只返回字符串的第一个数字。为此,我必须同时保留 for 循环和 return 语句。任何人都知道如何修复?
谢谢。
正如其他人所说,你的缩进有语义问题,但你不必编写这样的函数来做到这一点,一种更pythonic的方法是:
def get_digits(text):
return filter(str.isdigit, text)
在口译员上:
>>> filter(str.isdigit, "lol123")
'123'
当人们展示“更快”的方法时,请务必自己测试:
from timeit import Timer
def get_digits1(text):
c = ""
for i in text:
if i.isdigit():
c += i
return c
def get_digits2(text):
return filter(str.isdigit, text)
def get_digits3(text):
return ''.join(c for c in text if c.isdigit())
if __name__ == '__main__':
count = 5000000
t = Timer("get_digits1('abcdef123456789ghijklmnopq123456789')", "from __main__ import get_digits1")
print t.timeit(number=count)
t = Timer("get_digits2('abcdef123456789ghijklmnopq123456789')", "from __main__ import get_digits2")
print t.timeit(number=count)
t = Timer("get_digits3('abcdef123456789ghijklmnopq123456789')", "from __main__ import get_digits3")
print t.timeit(number=count)
~# python tit.py
19.990989106 # Your original solution
16.7035926379 # My solution
24.8638381019 # Accepted solution
您的缩进有点无聊(Python 中的缩进非常重要)。更好的:
def get_digits(str1):
c = ""
for i in str1:
if i.isdigit():
c += i
return c
使用生成器表达式的更短更快的解决方案:
''.join(c for c in my_string if c.isdigit())
这是因为您的return
语句在 for 循环内,所以它在第一个 trueif
条件后返回并停止。
def get_digits(str1):
c = ""
for i in str1:
if i.isdigit():
c += i
return c
有一个缩进问题,当它找到第一个数字时返回,与当前缩进一样,它被解释为语句内部的语句,它需要与被视为外部语句if
的语句平行。for
for
def get_digits(str1):
c = ""
for i in str1:
if i.isdigit():
c += i
return c
digits = get_digits("abd1m4m3m22mmmbb4")
print(digits)
与您的不正确代码等效的花括号是:
def get_digits(str1){
c = ""
for i in str1 {
if i.isdigit(){
c += i
return c # Notice the error here
}
}
}
并且当更正代码以将 return 语句与 对齐时for
,等效为:
def get_digits(str1){
c = ""
for i in str1 {
if i.isdigit(){
c += i
}
}
return c # Correct as required
}
您的代码几乎没问题,除了需要将return
语句移动到您的for
-loop 级别。
def get_digits(str1):
c = ""
for i in str1:
if i.isdigit():
c += i
return c ## <--- moved to correct level
所以,现在:
get_digits('this35ad77asd5')
产量:
'35775'
说明:
以前,您的函数只返回第一个数字,因为当它找到一个时,if
语句就被执行了return
(导致您从函数返回,这意味着您没有继续查看字符串)。
如您所见,空格/缩进在 Python 中确实很重要(与许多其他语言不同)。
当然它只返回第一个数字,你明确告诉 Python 一旦你有一个数字就返回。
更改return
语句的缩进,它应该可以工作:
def get_digits(str1):
c = ""
for i in str1:
if i.isdigit():
c += i
# Note the indentation here
return c