使用Python中的函数返回子字符串
我觉得我的问题很基本,因为我是计算机科学第一学期的学生使用Python中的函数返回子字符串,python,python-3.x,substring,Python,Python 3.x,Substring,我觉得我的问题很基本,因为我是计算机科学第一学期的学生 我被要求返回字符串中一个数字前面形成的子字符串,类似于“abcd5efgh”。这个想法是使用一个函数来给我“abcd”。我想我需要使用.isdigit,但我不确定如何将其转换为函数。提前谢谢你 可以使用regexp完成,但是如果您已经发现了isdigit,为什么不在这种情况下使用它呢 如果找不到数字,您可以修改最后一个返回s行以返回其他内容: def string_before_digit(s): for i, c in enume
我被要求返回字符串中一个数字前面形成的子字符串,类似于
“abcd5efgh”
。这个想法是使用一个函数来给我“abcd”
。我想我需要使用.isdigit
,但我不确定如何将其转换为函数。提前谢谢你 可以使用regexp完成,但是如果您已经发现了isdigit
,为什么不在这种情况下使用它呢
如果找不到数字,您可以修改最后一个返回s
行以返回其他内容:
def string_before_digit(s):
for i, c in enumerate(s):
if c.isdigit():
return s[:i]
return s # no digit found
print(string_before_digit("abcd5efgh"))
可以使用regexp完成,但是如果您已经发现了
isdigit
,为什么不在这种情况下使用它呢
如果找不到数字,您可以修改最后一个返回s
行以返回其他内容:
def string_before_digit(s):
for i, c in enumerate(s):
if c.isdigit():
return s[:i]
return s # no digit found
print(string_before_digit("abcd5efgh"))
下面的代码将使用正则表达式为您提供第一个非数字部分
import re
myPattern=re.compile('[a-zA-Z]*')
firstNonDigitPart=myPattern.match('abcd5efgh')
firstNonDigitPart.group()
>>> 'abcd'
下面的代码将使用正则表达式为您提供第一个非数字部分
import re
myPattern=re.compile('[a-zA-Z]*')
firstNonDigitPart=myPattern.match('abcd5efgh')
firstNonDigitPart.group()
>>> 'abcd'
如果不允许您使用正则表达式,可能是因为他们告诉您手动显式执行,您可以这样做:
def digit_index(s):
"""Helper function."""
# next(..., -1) asks the given iterator for the next value and returns -1 if there is none.
# This iterator gives the index n of the first "true-giving" element of the asked generator expression. True-giving is any character which is a digit.
return next(
(n for n, i in enumerate(i.isdigit() for i in "abc123") if i),
-1)
def before_digit(s):
di = digit_index(s)
if di == -1: return s
return s[:di]
应该给你想要的结果。如果你不被允许使用正则表达式,可能是因为他们告诉你用手显式地执行,你可以这样做:
def digit_index(s):
"""Helper function."""
# next(..., -1) asks the given iterator for the next value and returns -1 if there is none.
# This iterator gives the index n of the first "true-giving" element of the asked generator expression. True-giving is any character which is a digit.
return next(
(n for n, i in enumerate(i.isdigit() for i in "abc123") if i),
-1)
def before_digit(s):
di = digit_index(s)
if di == -1: return s
return s[:di]
应该会给你你想要的结果。我目前也是一名学生,我会这样解决这个问题: *对于我的学校,我们不允许使用python中的内置函数:/
def parse(string):
newstring = ""
for i in string:
if i >= "0" and i <= "9":
break
else:
newstring += i
print newstring #Can use return if your needing it in another function
parse("abcd5efgh")
def解析(字符串):
newstring=“”
对于字符串中的i:
如果我>=“0”并且我我目前也是一名学生,这就是我解决这个问题的方法:
*对于我的学校,我们不允许使用python中的内置函数:/
def parse(string):
newstring = ""
for i in string:
if i >= "0" and i <= "9":
break
else:
newstring += i
print newstring #Can use return if your needing it in another function
parse("abcd5efgh")
def解析(字符串):
newstring=“”
对于字符串中的i:
如果i>=“0”且i为功能性方法:)
功能性方法:)
非常简单的一行程序,使用:)
非常简单的一行程序,使用:)
itertools方法:
>>> from itertools import takewhile
>>> s="abcd5efgh"
>>> ''.join(takewhile(lambda x: not x.isdigit(), s))
'abcd'
itertools方法:
>>> from itertools import takewhile
>>> s="abcd5efgh"
>>> ''.join(takewhile(lambda x: not x.isdigit(), s))
'abcd'
您可以返回len(s)
@jamylak Right,而不是-1
,但是-1使该函数与其他搜索函数更兼容,并可在其他上下文中使用。以可重用的方式编程也是学习编程的一个重要方面……假设它是一个列表/字符串,您已经在对它进行切片,因此它现在不是非常可重用,而不是-1
,您可以返回len(s)
@jamylak right,但是-1使该函数与其他搜索函数更兼容,并可在其他上下文中使用。以可重用的方式编程也是学习编程的一个重要方面……假设它是一个列表/字符串,您已经在对它进行切片了,所以它现在不是很可重用。我刚刚尝试了这个方法,在突出显示数字之前,我发现了字符串\u的语法错误。我遗漏了什么吗?@posthumana如果您使用的是Python 3,请使用print(…)
而不是print…
太棒了!我早该知道的。非常感谢。我刚刚尝试了这个,但在突出显示\u数字之前出现了字符串\u的语法错误。我遗漏了什么吗?@posthumana如果您使用的是Python 3,请使用print(…)
而不是print…
太棒了!我早该知道的。非常感谢。如果‘0’认为“0”更习惯性的<代码>,请考虑更惯用的<代码>。