>>> t = [ ('wanna', 'o'),
... ('be', 'o'),
... ('like', 'o'),
... ('Alexander', 'B'),
... ('Coughan', 'I'),
... ('?', 'o')]
>>> x = [B[0] for B in t if B[1]=='B'][0] + ' ' + [I[0] for I in t if I[1]=='I'][0]
>>> print x
Alexander Coughan
>>>
from ast import literal_eval
from itertools import tee
def pairwise(iterable): # from itertools recipes
a, b = tee(iterable)
next(b, None)
return zip(a, b)
with open("a.txt") as f:
for p0, p1 in pairwise(map(literal_eval, f)):
if p0[1] == 'B' and p1[1] == 'I':
print(' '.join(p0[0], p1[0]))
break
这里有一个单一的解决方案
我是这样写的:
原因如下:
您的文件由两个字符串组成的} 是最好的答案。在
repr
s组成。这是一个非常糟糕的格式,如果你可以改变你存储数据的方式,你应该这样做。但是如果太晚了,您必须解析它,^{因此,我们通过
map
pingliteral_eval
将文件中的每一行转换为一个元组。在然后我们使用^{} recipes 中的
pairwise
将元组的iterable转换为相邻元组对的iterable。在所以,现在,在循环中,}将是相邻行中的元组,您只需编写您所描述的内容:如果}s
p0
和{p0[1]
是'B'
,后面跟着(也就是说,p1[1]
是)'I'
,join
这两个{我不知道你想怎么处理连接的字符串,所以我只是把它打印出来了。我也不确定是要处理多个值还是只处理第一个值,所以我放入了一个
break
。在我将扩展输入数据以包含更多
'B' + 'I'
示例。在结果是:
^{pr2}$相关问题 更多 >
编程相关推荐