优雅的方式过滤列表

时间:2013-10-21 11:24:47

标签: python python-2.7

我有两个列表,如下面的方式。我需要从after = ie xyz和.81中提取值。 我正在努力为这两个列表制作一个通用的解决方案或者为将来制作。 截至目前,我正在加入并在列表中找到而不是拆分。但我觉得可以用更好的方式完成。

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

3 个答案:

答案 0 :(得分: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是最后一项,则会再次出现错误(=)。

答案 1 :(得分: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']

答案 2 :(得分: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
>>> 
相关问题