我已经查找了类似的问题,但似乎只有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的倍数,代码可以在之后插入换行符。然后我可以加入列表,输出将是所需的。但是,当然,即使设计也可能是错误的......任何想法?
提前致谢。
答案 0 :(得分: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 :(得分:2)
for i, m in enumerate(macrolist, 1):
outputfile.write(m + ['\t', '\n'][i % 5 == 0])
答案 2 :(得分: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']