3

私はSOの周りで同様の質問を探しましたが、これはVisualBasicに対してのみ求められているようです。私がやりたいことはかなり単純なことだと思いますが、初心者である私はそれを成し遂げる方法を見つけることができないようです。

私はこのような文字列のリストを持っています:

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

問題は、これが1行あたり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の倍数である場合、コードは直後に改行を挿入できるというものでした。次に、リストに参加すると、出力は希望どおりになります。しかし、もちろん、デザインさえ間違っている可能性があります...何かアイデアはありますか?

前もって感謝します。

4

3 に答える 3

6

試す:

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)  

チャンク コードはここから取得されました。このコードを提供してくれたNed Batchelderに感謝します。

于 2012-04-17T09:23:19.823 に答える
3
for i, m in enumerate(macrolist, 1):  
    outputfile.write(m + ['\t', '\n'][i % 5 == 0])
于 2012-04-17T10:33:21.197 に答える
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']
于 2012-04-17T09:43:36.023 に答える