【问题标题】:How to extract series of numbers from string in python [closed]如何从python中的字符串中提取一系列数字[关闭]
【发布时间】:2018-01-08 08:43:28
【问题描述】:

给出一个字符串

st=arr{12 13 5 10 4}

是否可以从中提取所有数字?

li=[12,13,5,10,4]

我尝试过re,但失败了。

【问题讨论】:

  • 什么是arr{12 13 5 10 4}?是不是被引号包围了?那是一个字符串吗?你有没有尝试过解决这个问题?不幸的是,有人刚刚放弃了答案,但下次请提出一个更连贯的问题,该问题属于 minimal reproducible example 的示例
  • @idjaw tbh,它看起来如何并不重要。他说是一根绳子。无论它有前缀、后缀,还是周围的随机内容,\d 都将始终有效。
  • @Bharel 为了通过一个说明问题的示例来明确和准确,那么它的外观绝对重要。重点不是成为可能最快解释问题的 FGITW,而是要确保问题是连贯的,并且是试图解决的问题的现实/正确示例。也许你的解决方案很好,当然。但是,为什么不帮助改进问题并找出 100% 以何种方式提出的问题,然后再给出答案?

标签: python python-3.x


【解决方案1】:

list(map(int, re.findall(r"\d+", st)))

【讨论】:

  • 在为map 等引入迭代器时特别不鼓励这样做:docs.python.org/3.0/whatsnew/…
  • @jonrsharpe 他想要一份清单。如果没有它是一个列表,我也会更好。把它作为一个迭代器是理想的,但他可能想要双重迭代,在这种情况下这将是一个更好的方法
  • 没关系,我的意思是 list(map(...)) 应该重写为列表理解。
  • @jonrsharpe 不鼓励这样做,因为人们经常使用 lambda,这让它变得丑陋得要命。我在这里没有使用 lambda,所以没问题。事实上,这实际上会更快并且相当清晰。无论如何没有真正的区别。
  • 它不是更快,但如果你认为它更清晰,就足够公平了。
【解决方案2】:

假设字符串中的每个数字都用空格分隔,最简单的方法可能是使用列表推导

[int(number) for number in st.split(" ")]

如果你的字符串是 st = "12 13 5 10 4" 代码会做两件事

  • st.split(" ") 将创建列表

    [“12”、“13”、“5”、“10”、“4”]

  • int(number) 将应用于上述列表的每个元素。所以每个字符串都会被转换成一个int。你会得到

    [12, 13, 5, 10, 4]

【讨论】:

  • OP 的示例虽然不清楚,但与您认为数字由空格分隔的假设相矛盾。查看第一个和最后一个...
  • 在他的示例中 ( {12 13 5 10 4} ) 每个数字都用空格分隔。当然,第一个数字之前和最后一个数字之后没有空格,但两个数字之间总是有一个空格。我的代码适用于他的示例以及在同一模型上构建的所有其他示例。
  • 不,它没有。例如,在空格上拆分将为最后一项返回“4}”。
【解决方案3】:
import re
st="12 13 5 10 4 ftg"
numbers = re.findall(r"[0-9]+", st)
print (numbers)

【讨论】:

  • 这没有回答问题,唯一明确的部分是 OP 想要获得一个整数列表。您只生成了一个字符串列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-12
  • 2015-10-04
  • 1970-01-01
  • 2020-08-14
  • 2021-07-06
相关资源
最近更新 更多