Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中从列表中提取数字_Python - Fatal编程技术网

在Python中从列表中提取数字

在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

我使用的是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)?
我尝试了
数据[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
可以使用
条带
删除。