Python 按行拆分数组

Python 按行拆分数组,python,split,Python,Split,我有一个非常基本的问题。我写了一个代码,它打开一个.txt文件,其中包含一个数字123456789。然后它将所有的数字平方并写入其他文件。 现在我想添加到这个代码过程中,将所有这些数字拆分成行并重写,如下所示: 1 4 9 16 25 36 49 64 81 1 4 9 16 25 36 49 64 81 我的代码已经: n=[] dane = open("num.txt", "r") for i in dane: i = i.replace('\n','') for j in i

我有一个非常基本的问题。我写了一个代码,它打开一个.txt文件,其中包含一个数字
123456789
。然后它将所有的数字平方并写入其他文件。 现在我想添加到这个代码过程中,将所有这些数字拆分成行并重写,如下所示:

1 4 9
16 25 36
49 64 81
1 4 9
16 25 36
49 64 81
我的代码已经:

n=[]
dane = open("num.txt", "r")

for i in dane:
  i = i.replace('\n','')
  for j in i.split(' '):
        j = int(j)
        j = j**2
        n.append(j)

nowy = open("newnum.txt","w")
nowy.write(str(n))
nowy.close()

除了编写部分,您编写的代码工作正常。您需要将最后三行代码更改为

nowy = open("newnum.txt","w")
for i in range(0,len(n),3):
    nowy.write("{} {} {}\n".format(n[i],n[i+1],n[i+2]))
nowy.close()
循环的
可以解释为:

  • 通过使用称为步骤的
    range
    函数的第三个参数,循环遍历一次生成3的列表
    n
  • 在文件中一次写出三个值,以换行符结尾
更改代码行后的输出与预期一致

1 4 9
16 25 36
49 64 81
参考:

您可以尝试以下方法:

strNew = ''
dane = open("num.txt", "r")
row = 0
for i in dane:
  i = i.replace('\n','')
  for j in i.split(' '):
    row += 1
    j = int(j)
    j = j**2
    if (row % 3) == 0:
        strNew += str(j)+'\n'
    else:
        strNew += str(j) + ' ' # it can be ' ' or '\t'

nowy = open("newnum.txt","w")
nowy.write(strNew)
nowy.close()
结果是:


作为对@Bhargav答案的补充,“[a]将数据系列聚类为n个长度组的可能习惯用法是使用
zip(*[iter(s)]*n)

您也可以使用星号将列表/元组解压为
格式
函数调用的参数

所有这些都将导致编写部分的一个更具Pythonic(或者更确切地说是加密Pythonic?)版本:

with open("newnum.txt","w") as nowy:
    for sublist in zip(*[iter(n)]*3):
        nowy.write("{} {} {}\n".format(*sublist))
请注意,使用上下文管理器(
语句)可确保在退出块时在所有情况下正确关闭文件。由于其他更改将受到讨论,因此以后必须这样做,并且您应该明确养成使用它的习惯

(顺便说一句,你有没有注意到你从来没有关闭过
dane
文件?这是一个简单的错误,使用上下文管理器来管理该资源可以避免…

那么代码有什么问题?你的实际输入看起来如何?谢谢你,伙计,你的帮助真的很有用:D@wiedzminYo祝你一切顺利:)“Python中的数组只能有一种类型的元素”。
n
是Python列表;Python没有本机数组类型(尽管Python列表在CPython中实现为指针数组)。Python列表的元素不必具有相同的类型。但是,通常认为避免在列表中混合类型是一种良好的编程风格(除了特殊值,如
None
),但这只是一个指导原则,而不是一个硬性规则。
with open("newnum.txt","w") as nowy:
    for sublist in zip(*[iter(n)]*3):
        nowy.write("{} {} {}\n".format(*sublist))