gpt4 book ai didi

将字符串中的所有八进制值评估为整数的 Pythonic 方法

转载 作者:太空狗 更新时间:2023-10-29 22:05:56 27 4
gpt4 key购买 nike

所以我得到了一个看起来像 "012 + 2 - 01 + 24" 的字符串。我希望能够快速(更少的代码)评估该表达式...

我可以在字符串上使用 eval(),但我不希望 012 以八进制形式 (10) 表示,我希望它表示为 int (12)。

我的解决方案有效,但并不优雅。我假设有一种非常好的 pythonic 方法可以做到这一点。

我的解决方案:

#expression is some string that looks like "012 + 2 - 01 + 24"
atomlist = []
for atom in expression.split():
if "+" not in atom and "-" not in atom:
atomlist.append(int(atom))
else:
atomlist.append(atom)
#print atomlist
evalstring = ""
for atom in atomlist:
evalstring+=str(atom)
#print evalstring
num = eval(evalstring)

基本上,我拆解字符串,在其中找到数字并将它们转换为整数,然后我用整数重建字符串(基本上删除前导 0,除非 0 本身是一个数字)。

如何才能做得更好?

最佳答案

我很想使用正则表达式来删除前导零:

>>> re.sub(r'\b0+(?!\b)', '', '012 + 2 + 0 - 01 + 204 - 0')
'12 + 2 + 0 - 1 + 204 - 0'

这会删除每个数字开头的零,除非数字完全由零组成:

  • 第一个\b匹配一个词(token)边界;
  • 0+匹配一个或多个连续的零;
  • (?!\b) ( negative lookahead ) 禁止在零序列后跟标记边界的情况下进行匹配。

与基于 split() 的替代方法相比,这种方法的一个优点是它不需要空格即可工作:

>>> re.sub(r'\b0+(?!\b)', '', '012+2+0-01+204-0')
'12+2+0-1+204-0'

关于将字符串中的所有八进制值评估为整数的 Pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9843033/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com