2012-04-17 6 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) 

を...そして新しいファイルに書き込むが、この意志の出力タブのちょうど1行のテキストファイル:出力ファイルを生成するために、私はこのように私のリストの要素を結合することができますスペースのあるアイテム。私は元のように1行につき5単語しか持たないファイルを入手する必要があるので、リストに参加する前に5単語ごとに改行を挿入できると思った。私は次のことを試してみたが、私はのためにエラーが出る「/ためにサポートされていないオペランドのタイプ(複数可): 『STR』と 『INT』」:

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

ありがとう!これはうまくいくようです。その後、結果のリストに改行を加えて参加することができます。 –

+0

あなたは大歓迎です! – Emmanuel

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に感謝します。 HTTPから撮影

+1

://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks-in-python ...あなたあなたの情報源を引用することができます。 – Emmanuel

+0

あなたの答えをありがとうが、それは何らかの理由でうまくいかないようです。通訳者はコードを受け入れましたが、リストには何も変わりませんでした。上記の答えは私にとってはうまくいくようですが、問題は解決しました!再度、感謝します。 –

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

ありがとう、これも完璧に動作し、非常にきれいに見えます!私は将来の参考のためにそれを保つつもりです:) –

関連する問題