gpt4 book ai didi

Python条件连接不以标点符号结尾的*连续*字符串

转载 作者:行者123 更新时间:2023-12-02 01:41:47 28 4
gpt4 key购买 nike

我有一个单词列表,

list1 = ['hello', 'how', 'are', 'you?', 'i', 'am', 'fine', 'thanks.', 'great!']

我想加入,

list2 = ['hello how are you?', 'i am fine thanks.', 'great!']

有没有一种简单的Pythonic方法可以做到这一点?我曾考虑过进行 itertools.groupby 连接,但问题是我组中的所有元素都不具有相同的标准(我不能只查询它们是否都有标点符号)。基本上,是否包含元素 x 是潜在元素 x+n 的函数,其中 n 可能很大。这使问题变得复杂。

最佳答案

不要使用groupby();对于那些带标点符号和不带标点符号的单词,您会得到单独的组,然后您必须重新组合它们。

使用生成器函数:

import string

def sentence_groups(l, punctuation=tuple(string.punctuation)):
group = []
for w in l:
group.append(w)
if w.endswith(punctuation):
yield group
group = []
if group:
yield group

生成器从输入列表中收集单词,直到其中一个以标点符号结尾,此时生成整个组,之后该组将被清除以用于新组。

当迭代结束并且组中仍然有单词时,最后一组也会产生(即使它们末尾没有标点符号)。

将其与 str.join() 一起使用来生成输出:

>>> list1 = ['hello', 'how', 'are', 'you?', 'i', 'am', 'fine', 'thanks.', 'great!']
>>> [' '.join(group) for group in sentence_groups(list1)]
['hello how are you?', 'i am fine thanks.', 'great!']

我在 string.punctuation 中使用了所有标点符号字符串;这是相当广泛的:

>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

如果您想缩小范围,请传入特定标点字符的元组作为第二个参数,或者硬编码您自己的定义。

关于Python条件连接不以标点符号结尾的*连续*字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48814581/

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