2012-04-17 34 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