2013-10-21 8 views
5

私は次のように2つのリストを持っています。私はafter = = xyzと.81から値を抽出する必要があります。 私はリストまたはmakeの両方のための一般的な解決策を将来も作成しようとしています。 今のところ、私は参加して、分割よりintリストを見つけることでした。しかし、私はそれがより良い方法で行えると感じています。フィルタリストをエレガントにする方法

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 
>>> 
関連する問題