从python中的字符串中获取特定的子字符串

从python中的字符串中获取特定的子字符串,python,python-3.x,list,Python,Python 3.x,List,如何在python中存储lst1=[26.7,8.2,13.7,8.6,16]fromTrain_level1 Train_level1 = ['1_Rehana_Karim_F49_850_GL=26.7','43_G.M.Alauddin Azad_M42_940_GL=8.2','110_Ronojeet_Bishwash_M47_940_GL=13.7','112_Mustafizur_Rahman_M60_850_GL=8.6','123_Farida_Yeasmin_F55_940_

如何在
python
中存储
lst1=[26.7,8.2,13.7,8.6,16]
fromTrain_level1

Train_level1 = ['1_Rehana_Karim_F49_850_GL=26.7','43_G.M.Alauddin Azad_M42_940_GL=8.2','110_Ronojeet_Bishwash_M47_940_GL=13.7','112_Mustafizur_Rahman_M60_850_GL=8.6','123_Farida_Yeasmin_F55_940_GL=16']

类似地,如何将
lst2=[11.5,12.9,9.2]
Train_level2存储到
python

Train_level2 = ['S140_M75_GL=11.5-850LEDFon_F=110.jpg', 'S85_F56_GL=12.9-940LEDFon_F=105.jpg', 'S108_M71_GL=9.2-850LEDFon_F=100.jpg']

对于
Train\u level
,您需要获取
=
后面的数字,因此我们在字符串列表上使用
split()
将其按
=
字符拆分,并获取索引0中的第二个字符串:

lst1 = [float(train.split('=')[1]) for train in Train_level1]
对于
列车2级
,情况类似,除了我们需要进行两次拆分-首先通过
=
获得第二个字符串(索引1),然后通过
-
获得第一个字符串(索引0):


我们对结果使用
float()
,因为
split
返回一个字符串,但输出是一个数字列表,而不是字符串
float
将包含数字的十进制字符串转换为浮点数。

对于
列车级
,您需要在
=
之后获取数字,因此我们在字符串列表上使用
拆分()
将其按
=
字符拆分,并获取索引0中的第二个字符串:

lst1 = [float(train.split('=')[1]) for train in Train_level1]
对于
列车2级
,情况类似,除了我们需要进行两次拆分-首先通过
=
获得第二个字符串(索引1),然后通过
-
获得第一个字符串(索引0):


我们对结果使用
float()
,因为
split
返回一个字符串,但输出是一个数字列表,而不是字符串
float
将包含数字的十进制字符串转换为浮点数。

您可以使用正则表达式解析数字:

import re

Train_level1 = ['1_Rehana_Karim_F49_850_GL=26.7',
                '43_G.M.Alauddin Azad_M42_940_GL=8.2',  
                '110_Ronojeet_Bishwash_M47_940_GL=13.7',
                '112_Mustafizur_Rahman_M60_850_GL=8.6',
                '123_Farida_Yeasmin_F55_940_GL=16']

Train_level2 = ['S140_M75_GL=11.5-850LEDFon_F=110.jpg', 
                'S85_F56_GL=12.9-940LEDFon_F=105.jpg', 
                'S108_M71_GL=9.2-850LEDFon_F=100.jpg']


def parseIt(data):
    p1 = r"=(\d+\.?\d*)" # find '=' followed numbers followed by optional '.' + more numbers
    return [float(x[0]) for x in (re.findall(p1,y) for y in data) if x] 


print(parseIt(Train_level1))
print(parseIt(Train_level2))
输出:

[26.7, 8.2, 13.7, 8.6, 16.0]
[11.5, 12.9, 9.2]

列表comp和regex是相同的,因此我为它创建了一个函数。他们将正则表达式应用于每个列表元素。每个列表中只有一个
=99.99
元素,这样我们就可以将其中一个元素转换为浮点。

您可以使用正则表达式解析数字:

import re

Train_level1 = ['1_Rehana_Karim_F49_850_GL=26.7',
                '43_G.M.Alauddin Azad_M42_940_GL=8.2',  
                '110_Ronojeet_Bishwash_M47_940_GL=13.7',
                '112_Mustafizur_Rahman_M60_850_GL=8.6',
                '123_Farida_Yeasmin_F55_940_GL=16']

Train_level2 = ['S140_M75_GL=11.5-850LEDFon_F=110.jpg', 
                'S85_F56_GL=12.9-940LEDFon_F=105.jpg', 
                'S108_M71_GL=9.2-850LEDFon_F=100.jpg']


def parseIt(data):
    p1 = r"=(\d+\.?\d*)" # find '=' followed numbers followed by optional '.' + more numbers
    return [float(x[0]) for x in (re.findall(p1,y) for y in data) if x] 


print(parseIt(Train_level1))
print(parseIt(Train_level2))
输出:

[26.7, 8.2, 13.7, 8.6, 16.0]
[11.5, 12.9, 9.2]
列表comp和regex是相同的,因此我为它创建了一个函数。他们将正则表达式应用于每个列表元素。每个列表中只有一个
=99.99
元素,因此我们取一个元素并将其更改为浮点