3

我已经在 SO 中寻找类似的问题,但似乎这只是针对 Visual Basic 提出的。我想我想做的事情相当简单,但作为一个初学者,我似乎找不到完成它的方法。

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

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

问题是这是在从每行只有 5 个单词的选项卡式文件中读取之后生成的,然后在其中进行了一些更改(主要是改组)。为了生成输出文件,我可以这样加入列表的元素:

'\t'.join(macrolist)

...然后将其写入一个新文件,但这将输出一个仅包含一行制表符空格项目的文本文件。我需要得到一个每行只有 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 回答