从Python中的列表中提取数字

2024-04-28 06:13:19 发布

您现在位置:Python中文网/ 问答频道 /正文

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

下面是一个列表:

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']

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


Tags: 列表dataif数字speedrpmmavacuum
3条回答

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

>>> 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

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

>>> int(data[9][-4:-1])+1
103

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

另一个你可以做的事情是,如果你想从一个字符串中得到一个单一的整数,可以沿着(python2.x)的线:

s = "test123\n"
x = int(filter(lambda x: x.isdigit(), s))

在Python3中,filter返回一个filter object,这是一个iterable。您可以将其转换为一个列表,并将其加入以获得相同的函数结果。

s = "test123\n"
x = int(''.join(list(filter(lambda x: x.isdigit(), s))))

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

>>> 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,因此您只需将其转换为一个列表。

>>> s = "\n123test456\n"
>>> nums = list(map(int, ''.join([x if x.isdigit() else ' ' for x in s]).split()))
>>> print(nums)
[123, 456]

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

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

相关问题 更多 >