在Python中从列表中提取数字
我使用的是PythonV2.xWindows64位。 问题是,我想从列表中提取一个数字(102),但我只能得到if的一部分 以下是一份清单:在Python中从列表中提取数字,python,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_Positio
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)?
我尝试了
数据[9][2]
,但我得到的是“2
”而不是“102
”。在列表的索引9处,元素是一个字符串'LeftWheel\u Speed,102\r'
,[-1]将显示'\r'
字符,因此[-2]将显示2
。python中的字符串是列表类型,因此您将看到倒数第二个字符。您需要为每个数据元素拆分字符串,如下所示:
data[9].split(',')[1]
它首先在逗号处将字符串拆分为两个字符串,并打印102
,但请注意它仍然包含您可能要删除的\r
字符:
data[9].split(',')[1][:-1]
[:-1]
将切掉字符串的最后一个字符(这是一个列表,您可以进行列表切分)
编辑:如下所述,
'102\r'.strip()
将是删除特殊字符的更完整答案,因为它将删除列表中索引9处的所有字符。元素是字符串'LeftWheel\u Speed,102\r'
,[-1]将显示'\r'
字符,因此[-2]将显示2
。python中的字符串是列表类型,因此您将看到倒数第二个字符。您需要为每个数据元素拆分字符串,如下所示:
data[9].split(',')[1]
它首先在逗号处将字符串拆分为两个字符串,并打印102
,但请注意它仍然包含您可能要删除的\r
字符:
data[9].split(',')[1][:-1]
[:-1]
将切掉字符串的最后一个字符(这是一个列表,您可以进行列表切分)
编辑:如下所述,
'102\r'.strip()
将是删除特殊字符的更完整答案,因为它将删除所有字符使用re.search
和正则表达式模式,您可以从字符串中提取整数值
>>> 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
>>重新导入
>>>
>>>重新搜索(r'\d+',数据[9])
>>>重新搜索(r'\d+',数据[9])。组(0)
'102'
>>>速度=int(重新搜索(r'\d+',数据[9])。组(0))
>>>速度
102
这里,
re.search(r'\d+',data[9])
将返回一个匹配项,如果data[9]有任何十进制字符。然后使用.group(0)
检索此十进制字符,最后使用int()
内置方法将其转换为整数使用re.search
和正则表达式模式,可以从字符串中提取整数值
>>> 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
>>> int(data[9][-4:-1])+1
103
>>重新导入
>>>
>>>重新搜索(r'\d+',数据[9])
>>>重新搜索(r'\d+',数据[9])。组(0)
'102'
>>>速度=int(重新搜索(r'\d+',数据[9])。组(0))
>>>速度
102
这里,re.search(r'\d+',data[9])
将返回一个匹配项,如果data[9]有任何十进制字符。然后使用.group(0)
检索这些十进制字符,最后使用int()
内置方法将它们转换为整数
>>> int(data[9][-4:-1])+1
103
使用iterable[start:end]
获取它们的子集
您可以做的另一件事是,如果您想从字符串中获得一个整数,可以使用(python2.x)中的一些代码:
在Python3中,filter返回一个过滤器对象
,它是一个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对象
,因此您只需将其转换为列表即可
>>> s = "\n123test456\n"
>>> nums = list(map(int, ''.join([x if x.isdigit() else ' ' for x in s]).split()))
>>> print(nums)
[123, 456]
使用iterable[start:end]
获取它们的子集
您可以做的另一件事是,如果您想从字符串中获得一个整数,可以使用(python2.x)中的一些代码:
在Python3中,filter返回一个过滤器对象
,它是一个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对象
,因此您只需将其转换为列表即可
>>> 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
如果列表中包含单个
,
的所有项目都可以视为键值对,则可以将数据转换为字典。这使得访问您感兴趣的值变得容易
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
数据[9][4:-1]如何?@GarrettR对于其他元素来说可能会失败。
float(数据[9].strip().split(',')[1])
除了前两个元素外,其他元素都可以工作,因为它们没有值。使用strip
删除\r
@Amber.G。。。请务必接受以下答案中的一个来结束您的问题,否则,如果对您不起作用,请发表评论…数据[9][4:-1]?@GarrettR对其他元素会失败。float(数据[9].strip().split(',')[1])
除了前两个元素没有值外,其他元素都可以使用。使用strip
删除\r
@Amber.G。。。请务必接受以下答案中的一个以结束您的问题,否则,如果不适合您,请发表评论。\r
可以使用strip
str.strip
删除。非string.strip
:-)没有str
和string
在Python中是两个不同的东西。见和。很好,您现在已经编辑了。\r
可以使用条带
删除。