作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
文件中的元组:
('Wanna', 'O')
('be', 'O')
('like', 'O')
('Alexander', 'B')
('Coughan', 'I')
('?', 'O')
我的问题是,如何使用条件连接来自不同元组但位于同一索引中的两个字符串?
例如在我的例子中,如果 [1] 等于 'B' 并且后跟 'I',我想加入 [0] 中的字符串
所以输出会是这样的:
Alexander Coughan
这是我的代码,但输出与我想要的不同,它只是打印出来的“无”:
readF = read_file ("a.txt")
def jointuples(sentt, i):
word= sentt[i][0]
wordj = sentt[i-1][0]
nameq = sentt[i][1]
if nameq =='I':
temp= ' '.join (word + wordj)
return temp
def join2features(sentt):
return [jointuples(sentt, i) for i in range(len(sentt))]
c_joint = [join2features(s) for s in readF]
c_joint
最佳答案
我是这样写的:
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
原因如下:
您的文件似乎包含两个字符串的 Python 元组的 repr
。这是一种非常糟糕的格式,如果您可以更改存储数据的方式,那么您应该这样做。但如果为时已晚,您必须解析它,literal_eval
是最好的答案。
因此,我们通过 map
ping literal_eval
将文件中的每一行变成一个元组。
然后我们使用来自 itertools
recipes 的 pairwise
将可迭代的元组转换为可迭代的相邻元组对。
所以,现在,在循环内部,p0
和 p1
将是来自相邻行的元组,您可以准确地写出您所描述的内容:if p0[1]
是 'B'
并且其后跟(即 p1[1]
是)'I'
, join
两个 [0]
。
我不确定你想用连接的字符串做什么,所以我只是把它打印出来。我也不确定你是想处理多个值还是只处理第一个值,所以我加入了一个break
。
关于python - 如何使用 Python 连接来自不同元组但位于同一索引中的两个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29892774/
我是一名优秀的程序员,十分优秀!