仅从列表中提取整数(不是浮点数)

时间:2016-03-04 16:55:44

标签: python string integer extract

我在以下问题上遇到了一些问题:

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

我拥有的(这是一个字符串):

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

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

0,3,54,56

我在谷歌搜索(和堆栈溢出),这导致了这个解决方案:

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

这会导致一个空列表。

其他解决方案如:

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

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

2 个答案:

答案 0 :(得分:4)

您可以使用.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]

您可以使用相同的方法(稍作更改)来获取浮点数:

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

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

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

答案 1 :(得分:1)

如何使用以下正则表达式:

import re

f =  "0:6.0 3:5.6 54:12.3 56:12.0"
answer = [int(x) for x in re.findall(r'\d{1,2}(?=:)', f)]
print(answer)

<强>输出

[0, 3, 54, 56]

你也可以使用map而不是列表理解来实现相同的结果(如@ dawg的答案):

answer = map(int, re.findall(r'\d{1,2}(?=:)', f))