我有一个一维数组,例如arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ...] 任意长度。
如何将其打印到文本文件(整数/ float 以空格分隔),以便每 7 个元素都打印在文本文件的同一行上?
所以我希望文本文件看起来像这样:
第 1 行:1 2 3 4 5 6 7
第 2 行:8 9 10 11 12 13 14
请您参考如下方法:
您的问题可以分为三个部分:
- 如何将任意大小的列表分成特定长度的 block
- 如何使用空格作为分隔符打印整数/ float 列表
- 如何写入文件
将任意大小的列表分成特定长度的 block
使用 grouper 方法,如 this answer 中所述:
import itertools
def grouper(n, iterable):
it = iter(iterable)
while True:
chunk = tuple(itertools.islice(it, n))
if not chunk:
return
yield chunk
您可以轻松地将任意长度的列表拆分为所需长度的 block 。例如:
>>> arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
>>> for chunk in grouper(7, arr1): print chunk
...
(1, 2, 3, 4, 5, 6, 7)
(8, 9, 10, 11, 12, 13, 14)
(15, 16)
使用空格作为分隔符打印整数/ float 列表
将列表加入字符串的标准方法是使用 string.join() .但是,这仅适用于字符串列表,因此我们需要首先将每个元素转换为其字符串表示形式。这是一种方法:
>>> a = [1, 2, 3, 4]
>>> print " ".join(str(x) for x in a)
1 2 3 4
在前面的例子中使用这个方法,我们得到:
>>> for chunk in grouper(7, arr1):
... print " ".join(str(x) for x in chunk)
...
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16
这几乎就是您想要的输出。现在我们需要做的就是将其写入文件。
写入文件
with open("outfile.txt", "w") as f:
for chunk in grouper(7, arr1):
f.write(" ".join(str(x) for x in chunk) + "\n")
有关详细信息,请参阅 Reading and Writing Files .
