首页 > 解决方案 > 如何加入列表的各个部分

问题描述

我在其他地方找到了不同的答案,但我不太明白为什么我的代码不能正常工作。我要做的是获取一个字母字符列表并加入前 4 个、第二个 4、第三个 4 等元素。我将在下面粘贴一个示例以使这一点更清楚。

如果给出以下列表:['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K' ,'L','I','M','N','O','Q','R','S','T','U','V','W',' X','Y','Z']

我想组合这些元素,以便收到以下输出:

['ABCD'、'EFGH'、'IJKL'、'IMNO'、'QRST'、'UVWX'、'YZ']

我以为我自己找到了一个好的解决方案,但它似乎不起作用。我尝试的是:

x = 'ABCDEFGHIJKLIMNOQRSTUVWXYZ'
y = 4

def wrap(string, max_width):
    slist = [char for char in string]
    new = []
    for i in range(0, len(slist), max_width):
        new.append(''.join(slist[i:max_width]))
    return new

wrap(x, y)

我从中得到的输出是:

['ABCD', '', '', '', '', '', '']

如果有人可以帮助我找出问题所在并帮助我解决问题,我将不胜感激。就像我之前说的,我在网上找到了其他可以做我想做的事情的答案,但我真的很想弄清楚我在哪里出错了。

标签: python-3.xlist

解决方案


看起来 for 循环中存在逻辑问题:

您试图在 i:max_width 之间添加项目。但是 max_width 始终为 4,当 i > 4 时,您不会返回任何项目,因为它是一个空字符串。相反,我添加了 max_width 来表示分组总是相同的大小:

x = "ABCDEFGHIJKLIMNOQRSTUVWXYZ"
y = 4

def wrap(string, max_width):
    slist = [char for char in string]
    new = []
    for i in range(0,len(slist),max_width):
        new.append(''.join(slist[i:(i+max_width)]))
    return new

print(wrap(x, y))

推荐阅读