如果我有一个阵列:
stuff = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
如何以下列格式保存? 5个值+昏迷+其他5个值+昏迷等
12345, 678910, 1112131415
我尝试了什么,并没有给我所需的解决方案:
f = open('file.txt')
for item in stuff:
for i in xrange(5):
f.write("%s", item)
f.write(", ")
f.close()
提前致谢。
答案 0 :(得分:3)
尝试这种方式:
>>> s
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
>>> n
5
>>> [int(''.join(str(x) for x in s[i*n: i*n + n])) for i in range(len(s)/n)]
[12345, 678910, 1112131415]
只是一个没有完全测试代码的建议
编辑:要在文件中写入,请执行以下操作:
>>> L = [''.join(str(x) for x in s[i*n: i*n + n]) for i in range(len(s)/n)]
>>> with open("file", 'w') as f:
... for v in L:
... f.write(v + ', ')
...
我在写入文件时没有转换为int。
更新:改进代码
对于损失少拆分任何长度的列表,你可以做天花板划分。我改进了代码,并在下面添加:
def split_list(L, n):
"""split successive n-sized groups from L as a list
"""
from math import ceil
parts = int(ceil(len(L)/float(n))) # ceilng division 5/2 ==> 3
return [int(''.join(str(_) for _ in L[i*n: i*n + n])) for i in range(parts)]
一些测试用例
# test cases
n = 5
s = [1, 2, 3 ]
print split_list(s, 5) # output [123]
s = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
print split_list(s, 5) # output [12345, 678910, 111213]
s = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
print split_list(s, 5) # output [12345, 678910, 1112131415]
答案 1 :(得分:1)
根据我的评论,这是一个丑陋的快速例子:
def chunks(l, n):
""" Yield successive n-sized chunks from l.
"""
for i in xrange(0, len(l), n):
yield l[i:i+n]
with open('file.txt') as f:
f.write(', '.join([''.join((str(y) for y in x)) for x in chunks(stuff, 5)]))
@Grijesh Chauhan回答也不错
答案 2 :(得分:1)
最简单的方法,使用计数器
f = open("file.txt")
cnt = 0
for item in studff:
f.write("%s", item)
cnt = cnt + 1
if cnt % 5 == 0:
f.write(", ")
f.close()
答案 3 :(得分:1)
因为您的需求很简单。不需要拆分数组等。特别是当你需要迭代来编写它们时,使用enumreate。
这是一个打印到stdout的Python3代码,你可以轻松地为文件输出更改它。
for i, x in enumerate(stuff, 1):
print(x, end="")
if i % 5 == 0:
print(",", end="")
答案 4 :(得分:1)
如果您还需要5个值之间的分隔符,请使用以下内容:
stuff = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
n = 5
main_separator = ','
secondary_separator = '-'
#secondary_separator = '-' # <- when you do not need a secondary separator between the values
result = main_separator.join([secondary_separator.join([str(i) for i in stuff[i*n: i*n + n]]) for i in xrange(len(stuff)/n)])
print result
这会产生以下输出
'1-2-3-4-5,6-7-8-9-10,11-12-13-14-15'
您可以通过以下方式打印到文件:
whith open('filename', 'w)
h.write(result)
h.close()