gpt4 book ai didi

python - 在某个字符之后从字符串中提取数字

转载 作者:太空宇宙 更新时间:2023-11-04 07:34:30 25 4
gpt4 key购买 nike

哎呀,我需要一些帮助。我有以下字符串,始终采用“char,num”格式:

s = "abcdef,12"
v = "gbhjjj,699"

我只想获取逗号后的数字,我该怎么做而不用逗号作为分隔符来分割字符串?

我尝试了 s[-2:]v[-3:] 哪个有效,但我如何在不知道位数的情况下使其有效?

最佳答案

假设:

  • 知道字符串中有一个逗号,因此您不必搜索整个字符串来确定是否存在逗号。
  • 您知道该模式是 'many_not_digits,few_digits',因此逗号两侧的左右部分的大小存在很大的不平衡。
  • 您无需遍历即可到达字符串的末尾,you can in Python because string indexing is constant time

然后您可以从末尾开始并向后走寻找逗号,与从左侧走寻找逗号相比,这对您的示例来说总体工作量要少。

用 Python 代码工作比使用用 C 编写的 Python 引擎代码慢得多,对吧?那么它真的会更快吗?

  1. 制作一个字符串“aaaaa....,12”
  2. 使用 timeit 模块比较每种方法 - 拆分或右走。
  3. Timeit 对一些代码进行了一百万次运行。
  4. 延长“aaaaaaaaaaaaaaaa....,12”的长度,使其达到极限。

他们如何比较?

  • 字符串拆分:1400 个“a”运行一百万次只用了 1 秒。
  • 字符串拆分:4000 个“a”运行一百万次只用了 2 秒。
  • 向右走:1400“a”跑一百万次只用了 0.4 秒。
  • 向右走:999,999“a”跑一百万次用了……0.4 秒。

!

from timeit import timeit

_split = """num = x.split(',')[-1]"""

_rwalk = """
i=-1
while x[i] != ',':
i-=1
num = x[i+1:]
"""

print(timeit(_split, setup='x="a"*1400 + ",12"'))
print(timeit(_rwalk, setup='x="a"*999999 + ",12"'))

例如

1.0063155219977489     # "aaa...,12" for 1400 chars, string split
0.4027107510046335 # "aaa...,12" for 999999 chars, rwalked. Faster.

Try it online at repl.it

我不认为这在算法上比 O(n) 更好,但是由于假设的限制,我让你比 str.split() 拥有更多的知识,并且可以利用它来跳过大部分字符串的遍历并在实践中击败它 - 文本部分越长,数字部分越短,您受益越多。

关于python - 在某个字符之后从字符串中提取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39481788/

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