2013-10-21 119 views
5

我有两个列表像下面的方式。我需要从后= =即xyz和.81提取值。 我正在尝试为这两个列表制作一个通用解决方案,或者为将来制作一个通用解决方案。 截至目前,我正在进行连接并找到列表,而不是拆分。但我觉得可以以更好的方式完成。优雅的方式来过滤列表

a = ['.TITLE', "'=", 'xyz', 'vdd', '=', '0.81', 'temp', "-40'"] 
b = ['.TITLE', "'$", 'abc', '=', 'xyz', 'vdd', '=', '0.99', 'temp', "125'"] 
+0

那么应该包含“0.99”呢? – thebjorn

+0

是的,应该是。 – user765443

回答

6

你可以使用next()与发电机:

a = ['.TITLE', "'=", 'xyz', 'vdd', '=', '0.81', 'temp', "-40'"] 
a1 = iter(a) 
for item in a1: 
    if '=' in item: 
     print next(a1) 

打印:

xyz 
0.81 

注意,如果=是最后一个项目,这将引发一个StopIteration错误。


您还可以使用enumerate()

a = ['.TITLE', "'=", 'xyz', 'vdd', '=', '0.81', 'temp', "-40'"] 
for i, j in enumerate(a): 
    if '=' in j: 
     print a[i+1] 

打印:

xyz 
0.81 

再次,如果=是最后一个项目,这将产生一个错误(IndexError)。

4

作为一个功能:

import itertools 

def extract_items_after(lst, marker='='): 
    for x, y in itertools.izip_longest(lst, lst[1:]): 
     if marker in x: 
      yield y 

使用您的数据:

a = ['.TITLE', "'=", 'xyz', 'vdd', '=', '0.81', 'temp', "-40'"] 
b = ['.TITLE', "'$", 'abc', '=', 'xyz', 'vdd', '=', '0.99', 'temp', "125'"] 

for l in [a, b]: 
    print list(extract_items_after(l)) 

结果:

>>> 
['xyz', '0.81'] 
['xyz', '0.99'] 
+1

美丽而不会引发任何异常。 – ychaouche

0

非优雅的方式是使用标志:

a = ['.TITLE', "=", 'xyz', 'vdd', '=', '0.81', 'temp', "-40'"] 
b = ['.TITLE', "'$", 'abc', '=', 'xyz', 'vdd', '=', '0.99', 'temp', "125'"] 

def extract(L,sep="="): 
    pick_this_one = False 
    for item in L : 
     if pick_this_one: 
      pick_this_one = False 
      yield item 
     if item == sep : 
      pick_this_one = True 

for value in extract(a+b): 
    print value 

>>> xyz 
0.81 
xyz 
0.99 
>>>