gpt4 book ai didi

python - 如何使用 Python 连接来自不同元组但位于同一索引中的两个字符串?

转载 作者:行者123 更新时间:2023-11-28 20:42:53 27 4
gpt4 key购买 nike

文件中的元组:

 ('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是最好的答案。

因此,我们通过 mapping literal_eval 将文件中的每一行变成一个元组。

然后我们使用来自 itertools recipespairwise将可迭代的元组转换为可迭代的相邻元组对。

所以,现在,在循环内部,p0p1 将是来自相邻行的元组,您可以准确地写出您所描述的内容:if p0[1]'B' 并且其后跟(即 p1[1] 是)'I' , join 两个 [0]

我不确定你想用连接的字符串做什么,所以我只是把它打印出来。我也不确定你是想处理多个值还是只处理第一个值,所以我加入了一个break

关于python - 如何使用 Python 连接来自不同元组但位于同一索引中的两个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29892774/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com