从列表中拆分和提取特定项目

时间:2015-12-03 21:10:36

标签: python python-2.7

嗨,我是这个领域的新手,任何帮助都会提前得到赞赏。

我在Windows 8操作系统中使用Python v2.7。 现在我有一个清单:

data = ['testmode on  \r', 'getdigitalsensors \r', '\x1aDigital Sensor Name, Value\r', 
'SNSR_DC_JACK_IS_IN,0\r', 'SNSR_DUSTBIN_IS_IN,1\r', 'SNSR_LEFT_WHEEL_EXTENDED,0\r', 
'SNSR_RIGHT_WHEEL_EXTENDED,0\r', **'LSIDEBIT,0\r', 'LFRONTBIT,0\r'**,
'LLDSBIT,0\r', **'RSIDEBIT,0\r', 'RFRONTBIT,0\r'**, 'RLDSBIT,0']

问题:

  1. 如何从列表中分割/提取这4个项目(粗体)['LSIDEBIT,0 \ r','LFRONTBIT,0 \ r','RSIDEBIT,0 \ r','RFRONTBIT,0 \ R']

  2. 如何在上述四项之后拆分/提取位(0)?输出如下:

    0
    0
    0
    0   
    

3 个答案:

答案 0 :(得分:1)

这样可行:

selected = [data[index] for index in [7, 8, 10, 11]]
res = [int(x.strip().split(',')[-1]) for x in selected]

如果您事先不知道索引,但是字符串的第一部分,您可以这样做:

targets = ['LSIDEBIT', 'LFRONTBIT','RSIDEBIT', 'RFRONTBIT']
selected = []
for item in data:
    for target in targets:
        if item.startswith(target):
            selected.append(item)
res = [int(x.strip().split(',')[-1]) for x in selected]

res成立:

[0, 0, 0, 0]

答案 1 :(得分:1)

您可以使用正则表达式组来提取位:

import re
toextract = ['LSIDEBIT', 'LFRONTBIT','RSIDEBIT', 'RFRONTBIT']
for exitm in toextract:
    for itm in data:
        if itm.startswith(exitm):
            bitre = re.search(exitm+r',(\d)', itm)
            if bitre is not None:
                print bitre.group(1)
                break

答案 2 :(得分:0)

这个怎么样:

l = ['testmode on \r', 'getdigitalsensors \r', '\x1aDigital Sensor Name, Value\r', 'SNSR_DC_JACK_IS_IN,0\r', 'SNSR_DUSTBIN_IS_IN,1\r', 'SNSR_LEFT_WHEEL_EXTENDED,0\r', 'SNSR_RIGHT_WHEEL_EXTENDED,0\r', 'LSIDEBIT,0\r', 'LFRONTBIT,0\r', 'LLDSBIT,0\r', 'RSIDEBIT,0\r', 'RFRONTBIT,0\r', 'RLDSBIT,0']

for i in map(l.__getitem__,[7,8,10,11]):
        print [int(s) for s in i.split(',')[1] if s.isdigit()]

输出:

[0]
[0]
[0]
[0]