2013-10-21 209 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 
>>>