首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中从列表中提取数字

在Python中从列表中提取数字
EN

Stack Overflow用户
提问于 2016-02-12 03:09:27
回答 5查看 23.2K关注 0票数 1

我使用的是Python v2.x Windows 64位。问题是,我想从列表中提取一个数字(102),但我只能得到if的一部分。

下面是一个列表:

代码语言:javascript
复制
data = ['getmotors \r', 'Parameter,Value\r', 'Brush_RPM,0\r', 'Brush_mA,0\r', 'Vacuum_RPM,0\r', 'Vacuum_mA,0\r', 'LeftWheel_RPM,1800\r', 'LeftWheel_Load%,42\r', 'LeftWheel_PositionInMM,10452\r', 'LeftWheel_Speed,102\r', 'RightWheel_RPM,1800\r', 'RightWheel_Load%,42\r', 'RightWheel_PositionInMM,9650\r', 'RightWheel_Speed,102\r', 'ROTATION_SPEED,0.00\r', 'SideBrush_mA,0\r', '\x1a']

如何提取LeftWheel_Speed (102)的速度?我试过data[9][-2],但得到的是‘2’而不是‘102’。

EN

回答 5

Stack Overflow用户

发布于 2016-02-12 03:18:51

使用re.search和正则表达式模式,可以从字符串中提取整数值。

代码语言:javascript
复制
>>> import re
>>> 
>>> re.search(r'\d+', data[9])
<_sre.SRE_Match object; span=(16, 19), match='102'>
>>> re.search(r'\d+', data[9]).group(0)
'102'
>>> speed = int(re.search(r'\d+', data[9]).group(0))
>>> speed
102

在这里,如果data9包含任何十进制字符,则re.search(r'\d+', data[9])将返回匹配。然后使用.group(0)检索该十进制字符,最后使用int()内置方法将它们转换为整数

票数 2
EN

Stack Overflow用户

发布于 2016-02-12 03:21:03

代码语言:javascript
复制
>>> int(data[9][-4:-1])+1
103

使用iterable[start:end]获取它们的子集。

你可以做的另一件事是,如果你想从一个字符串中获得一个整数,可以使用类似于(python2.x)的代码:

代码语言:javascript
复制
s = "test123\n"
x = int(filter(lambda x: x.isdigit(), s))

在Python3中,filter返回一个可迭代的filter object。您可以将其转换为列表,并将它们连接起来,以获得相同的函数结果。

代码语言:javascript
复制
s = "test123\n"
x = int(''.join(list(filter(lambda x: x.isdigit(), s))))

请注意,这不考虑分隔的数字。例如,s = "123test456"将返回123456。如果你想把它们分开,你需要使用一些更聪明的方法。

代码语言:javascript
复制
>>> s = "\n123test456\n"
>>> nums = map(int, ''.join([x if x.isdigit() else ' ' for x in s]).split())
>>> print(nums)
[123, 456]

同样,在python3中,map返回一个map object,因此您只需将其转换为列表。

代码语言:javascript
复制
>>> s = "\n123test456\n"
>>> nums = list(map(int, ''.join([x if x.isdigit() else ' ' for x in s]).split()))
>>> print(nums)
[123, 456]
票数 2
EN

Stack Overflow用户

发布于 2016-02-12 03:24:34

如果列表中包含单个,的所有项都可以被视为键值对,则可以将数据转换为字典。这使得访问您感兴趣的值变得很容易。

代码语言:javascript
复制
datadict = {}
for item in data:
    key_value = item.strip().split(',')
    if len(key_value) == 2:
        key, value = key_value
        datadict[key] = value
print(datadict['RightWheel_Speed'])  # 102
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35347974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档