gpt4 book ai didi

Python 字符串追加

转载 作者:行者123 更新时间:2023-11-28 22:03:54 38 4
gpt4 key购买 nike

我有一个 python 方法,它采用 (string, float) 形式的元组列表和返回一个字符串列表,如果将这些字符串组合起来,将不会超过某个限制。我不是为了保留输出长度而拆分句子,而是确保将句子长度保持在所需输出长度的范围内。

例如:
s: [('你在哪里',1),('第二天呢',2),('下一个事件是什么时候',3)]

最大长度:5
output : '你在哪里,第二天呢'

最大长度:3
输出:'你在哪里'

这就是我正在做的:

l=0
output = []
for s in s_tuples:
if l <= max_length:
output.append(s[0])
l+=len(get_words_from(s[0]))
return ''.join(output)

除了在达到长度时停止之外,是否有更聪明的方法来确保输出字长不超过 max_length?

最佳答案

首先,如果达到最大长度,我认为没有理由将循环的中断推迟到下一次迭代。

因此,更改您的代码,我想出了以下代码:

s_tuples = [('Where are you',1),('What about the next day',2),('When is the next event',3)]


def get_words_number(s):
return len(s.split())


def truncate(s_tuples, max_length):
tot_len = 0
output = []
for s in s_tuples:
output.append(s[0])
tot_len += get_words_number(s[0])
if tot_len >= max_length:
break
return ' '.join(output)


print truncate(s_tuples,3)

其次,我真的不喜欢创建一个临时对象output。我们可以为 join 方法提供迭代器,该迭代器迭代初始列表而不复制信息。

def truncate(s_tuples, max_length):

def stop_iterator(s_tuples):
tot_len = 0
for s,num in s_tuples:
yield s
tot_len += get_words_number(s)
if tot_len >= max_length:
break

return ' '.join(stop_iterator(s_tuples))


print truncate(s_tuples,3)

此外,在您的示例中,输出略大于设置的最大字数。如果您希望字数始终小于限制(但仍然是最大可能),而不是在检查限制后放置 yield:

def truncate(s_tuples, max_length):

def stop_iterator(s_tuples):
tot_len = 0
for s,num in s_tuples:
tot_len += get_words_number(s)
if tot_len >= max_length:
if tot_len == max_length:
yield s
break
yield s

return ' '.join(stop_iterator(s_tuples))


print truncate(s_tuples,5)

关于Python 字符串追加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8056648/

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