python-3.x - 如何加入列表的各个部分
问题描述
我在其他地方找到了不同的答案,但我不太明白为什么我的代码不能正常工作。我要做的是获取一个字母字符列表并加入前 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', '', '', '', '', '', '']
如果有人可以帮助我找出问题所在并帮助我解决问题,我将不胜感激。就像我之前说的,我在网上找到了其他可以做我想做的事情的答案,但我真的很想弄清楚我在哪里出错了。
解决方案
看起来 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))