我有两个列表,如下所示。我需要从后面的等号中提取值,例如xyz和.81。 我正在尝试制作一个通用解决方案用于这两个列表或者未来的列表。 目前,我正在使用列表连接和查找,然后拆分。但是我觉得还有更好的方法可以实现。
a = ['.TITLE', "'=", 'xyz', 'vdd', '=', '0.81', 'temp', "-40'"]
b = ['.TITLE', "'$", 'abc', '=', 'xyz', 'vdd', '=', '0.99', 'temp', "125'"]
我有两个列表,如下所示。我需要从后面的等号中提取值,例如xyz和.81。 我正在尝试制作一个通用解决方案用于这两个列表或者未来的列表。 目前,我正在使用列表连接和查找,然后拆分。但是我觉得还有更好的方法可以实现。
a = ['.TITLE', "'=", 'xyz', 'vdd', '=', '0.81', 'temp', "-40'"]
b = ['.TITLE', "'$", 'abc', '=', 'xyz', 'vdd', '=', '0.99', 'temp', "125'"]
您可以使用生成器和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
)。
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']
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
>>>
'0.99'
也应该包括在内吗? - thebjorn