首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按多个字符将列表拆分成块[Python]

按多个字符将列表拆分成块[Python]
EN

Stack Overflow用户
提问于 2021-01-30 07:26:38
回答 3查看 42关注 0票数 2

我有一个单词列表(在我的例子中是域),我需要将这个列表分成几组,每组包含的字符不能超过N个字符(=字节)。重要的一点是,每组的最后一个词不应该在中间中断。我的意思是不应该有这样的情况:

代码语言:javascript
运行
复制
google.com
yahoo.com
bin

在我的代码中,我只设法检索了第一个组,我不知道如何进行适当的循环来将列表拆分成多个块。

代码语言:javascript
运行
复制
domains = ['google.com','yahoo.com','bing.com','microsoft.com','apple.com','amazon.com']


domains = list(domains)
text = ""
chars_sent=0
max_chars=20

for each_domain in domains:
    if chars_sent > max_chars:
        chars_sent = 0
        break
    text += each_domain+"\n"
    chars_sent += len((str(each_domain)))
print(text)

预期输出:

代码语言:javascript
运行
复制
google.com
yahoo.com <--- 19 chars in this part

bing.com <--- 8 chars in this part

microsoft.com <--- 13 chars in this part

apple.com
amazon.com <--- 19 chars in this part
EN

回答 3

Stack Overflow用户

发布于 2021-01-30 07:34:04

在添加到结果中之前,必须检查添加新元素是否会超过最大值。

当你达到极限时,你不应该中断循环,只需在结果中添加一个空行即可。

代码语言:javascript
运行
复制
domains = ['google.com','yahoo.com','bing.com','microsoft.com','apple.com','amazon.com']

text = ""
chars_sent=0
max_chars=20

for each_domain in domains:
    if chars_sent + len(each_domain) > max_chars:
        chars_sent = 0
        text += "\n"
    text += each_domain+"\n"
    chars_sent += len(each_domain)

print(text)

不需要使用list(domain),因为它已经是一个列表,或者str(each_domain),因为它已经是一个字符串。

票数 3
EN

Stack Overflow用户

发布于 2021-01-30 07:39:40

你就快到了!如果您想以嵌套列表的形式获得结果,这里有另一个答案(使用起来可能比纯文本更实用)。

代码语言:javascript
运行
复制
domains = ['google.com', 'yahoo.com', 'bing.com', 'microsoft.com', 'apple.com', 'amazon.com']
max_chars = 20

chunk_size = 0
chunks = [[]]
for domain in domains:
    if chunk_size + len(domain) > max_chars:
        chunk_size = 0
        chunks.append([])
    
    chunks[-1].append(domain)
    chunk_size += len(domain)

print(chunks)

结果:

代码语言:javascript
运行
复制
[
    ['google.com', 'yahoo.com'],
    ['bing.com'],
    ['microsoft.com'],
    ['apple.com', 'amazon.com']
]
票数 1
EN

Stack Overflow用户

发布于 2021-01-30 10:13:02

您还可以使用:

代码语言:javascript
运行
复制
domains = ['google.com','yahoo.com','bing.com','microsoft.com','apple.com','amazon.com']
max_chars=20
out = [""]
for d in domains:
    if len(d) + len(out[-1].strip()) > max_chars:
        out.append(f"{d}\n")
    else:
        out[-1] = f"{out[-1].strip()}\n{d}\n"

print(*out, sep="\n")

代码语言:javascript
运行
复制
google.com
yahoo.com

bing.com

microsoft.com

apple.com
amazon.com

Demo

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65963065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档