用 python 将所有浮点数乘以一个数字



我遇到了这个问题,我必须通过创建一个将所有浮点数乘以预定浮点数(参数(的函数来解决,但问题是我无法让它识别浮点数,只能识别整数(将 2.5 识别为 2 和 5(

例如,我在这里看到的以 2 作为参数的代码将运行"2.5,3.5,4.5"并产生"4.10,6.10,8.10",但我想以"5,7,9"结束。有什么想法吗?

以下是解决它的代码,但仅适用于整数:

def myfunction(mystring, by):
return re.sub(
re.compile("d+"), 
lambda matchobj: str(int(matchobj.group(0))*by), 
mystring
)

如果您可以对一个小任务使用全新的库,那么以下是您使用 re

的解决方案
example = "2.5,3.5,4.5"
example = re.sub(""", "", example)
example = re.split(",", example)
example = [2*float(e) for e in example]

但是你最好像答案一样使用 split @smci

当你说"所有漂浮在一条线上"时,你的意思是"在一根弦中"。所以你真的首先想把它转换成单独的字符串:"2.4 6.7 1.8".split(),然后将它们转换成浮点数列表。此外,您也不需要正则表达式

您可以在列表理解中完成所有这些操作:

>>> numbers = [float(s) for s in "2.4 6.7 1.8".split()]
[2.4, 6.7, 1.8]

或者即使你愿意,你也可以包括乘以by

[by * float(s) for s in "2.4 6.7 1.8".split()]
def myfunction(mystring, by):
return [by * float(s) for s in "2.4 6.7 1.8".split()]

现在,如果您坚持使用正则表达式(您不需要它也不应该(,您的问题是您不知道如何更改正则表达式 r'\d+' 正则表达式来处理浮点数......请参阅文档。 提示: 。匹配小数点。请记住,在浮点数中,小数部分是可选的,例如7 7. 7.5都可以是漂浮物。

那么,提示:什么是具有一个或多个数字的正则表达式,可以选择后跟小数点和零位或多位数字?

您可以使用字符串的split()方法和map()函数在一行中简单地执行此操作。

def mymethod(mystring, by):
return " ".join(map(lambda num: float(num) * by, mystring.split()))

或者更简洁地说:

mymethod = lambda mystring, by: " ".join(map(lambda num: float(num) * by, mystring.split()))

要使用re匹配浮点数:

r"([+-])?d*.?d+"

最新更新