2012-04-17 328 views
2

我查看过类似的问题,但似乎只有Visual Basic提出这个问题。我想,我想做的事情很简单,但作为初学者,我似乎无法找到完成的方法。Python - 插入每行x个元素的换行符

我有这样一个字符串列表:

macrolist = ['hans', 'are', 'we', 'the', 'baddies', 'cake', 'or', 'death', 'cake', 'please', 'do', 'you', 'have', 'a', 'flag'] 

的问题是,这已经从一个标签文件,其中每行只有5个字读,然后做了一些更改之后产生它(主要是洗牌)。为了产生一个输出文件,我可以加入我的列表中的元素这样的:

'\t'.join(macrolist) 

...然后将其写入到一个新的文件,但是这将输出与标签的只有一行文本文件 - 空间项目。我需要得到一个每行只有5个字的文件,就像原文一样,所以我想,在加入列表之前,我可以每5个字插入一个换行符。我试过以下,但我得到了“不支持的操作类型为/:‘海峡’和‘廉政’”:错误

for index in macrolist: 
    op = index/5 
    if op is int: 
     macrolist.append('\n') 

print macrolist 

我当时的想法是,如果给定指标是5的倍数,代码可以在之后插入一个换行符。然后,我可以加入列表,输出将按需要。但是,当然,即使设计可能是错的......任何想法?

在此先感谢。

回答

1
>>> [' '.join(macrolist[5 * i: 5 * i + 5]) for i in range(0, len(macrolist)/5)] 
['hans are we the baddies', 'cake or death cake please', 'do you have a flag'] 
+0

谢谢!这似乎工作。然后我可以用换行符加入结果列表。 – 2012-04-17 09:53:27

+0

不客气! – Emmanuel 2012-04-17 10:01:40

5

尝试:

def chunks(l, n): 
    """ Yield successive n-sized chunks from l. 
    """ 
    for i in xrange(0, len(l), n): 
     yield l[i:i+n] 
chunks(macrolist,5) 

然后列出遍历列表如下:

for chunk in chunks(macrolist,5): 
    print '\t'.join(chunk) 

的块代码被送往形式here。我想感谢Ned Batchelder的代码。

+1

从http摘自://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks-in-python ......你可以引用你的来源。 – Emmanuel 2012-04-17 09:45:09

+0

感谢您的回答,但由于某种原因,这似乎不起作用。口译员接受了该代码,但没有在列表中发生任何变化。上面的答案似乎适用于我,但问题解决了!再次感谢。 – 2012-04-17 09:55:18

1
for i, m in enumerate(macrolist, 1): 
    outputfile.write(m + ['\t', '\n'][i % 5 == 0]) 
+0

谢谢,这也很完美,看起来非常整齐!我会保留以备日后参考:) – 2012-04-17 12:27:50