python - 仅从列表中提取整数(不提取 float )

标签 python string integer extract

我遇到以下问题:

我有一个字符串,其中包含整数和 float 。我无法仅提取整数(而不是 float !)。

我有什么(它是一个字符串):

f=  "0:6.0 3:5.6 54:12.3 56:12.0"

结果应该如何(不是字符串形式):

0,3,54,56

我在 Google(和 stack-overflow)上搜索了这个解决方案:

[int(s) for s in f.split() if s.isdigit()]

这会导致一个空列表。

其他解决方案,例如:

int(re.search(r'\d+', f).group())

导致“0 个整数”。抱歉,我是新人,但我真的无法解决这个问题。

最佳答案

您可以使用.partition(':') :

>>> s="0:6.0 3:5.6 54:12.3 56:12.0"
>>> [e.partition(':')[0] for e in s.split()]
['0', '3', '54', '56']

然后对这些字符串调用 int:

>>> [int(e.partition(':')[0]) for e in s.split()]
[0, 3, 54, 56]

或者,

>>> map(int, (e.partition(':')[0] for e in s.split()))
[0, 3, 54, 56]

您可以使用相同的方法(稍有改变)来获取 float :

>>> map(float, (e.partition(':')[2] for e in s.split()))
[6.0, 5.6, 12.3, 12.0]

评论中提出的公平问题:为什么使用分区?您可以使用 int(split(":")[0])

  1. 使用.partition,所有读者(包括 future 的自己)都清楚您只查看 1 个分割。 (当然,您可以使用split(delimiter, maxsplit)的2个参数形式,但我认为对于单个拆分来说不太清楚......)
  2. 测试成功的分区会更容易,因为分区总是生成一个三元素元组,并且您只需要测试元素tuple[1]的真实性。<
  3. 您可以在 lh,delimiter,rh=string.partion('delimiter') 形式的元组赋值中安全地使用 .partion,其中 lh, rh如果未找到分隔符,=string.split('delimiter') 将产生 ValueError
  4. 由于结果元组中包含分隔符,因此使用 ''.join(tuple_from_partion)split 重新组装原始字符串会更容易,因为 中的分隔符>split 丢失。
  5. 为什么不呢?

关于python - 仅从列表中提取整数(不提取 float ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35801698/

相关文章:

php - 使用 PHP 将数字缩写(5.2k、1.7m 等)转换为有效整数

python - Pandas 中奇怪的条形图对齐

python - 如何使用 Python 在 1 次写入 DynamoDB 中插入对象列表?

c# - 将字符串编码为 base-64 或从 base-64 编码

ruby-on-rails - 如何检查 `Integer` 是否大于另一个 `Integer` "easily"/"efficiently"?

java - 00在Java中是整数还是八进制?

python - 尝试使用 Tkinter (Python) 时出现 Unicode 解码错误

python - sqrtm() 函数返回 nan

javascript - 有效地替换字符串中的所有重音字符?

Python 从 DataFrame 字符串字段中去除所有空格