【问题标题】:Printing an array of floats in a certain format以某种格式打印浮点数组
【发布时间】:2013-07-30 15:03:26
【问题描述】:

我在将以下数组写入 .txt 文件时遇到问题。

这是我的代码:

for i in range(len(my_particles)):
    list = []
    list.append(my_particles[i].n)
    for z in range(len(my_particles[i].neighbours)):
        list.append(my_particles[i].neighbours[z])

    #for i in range(len(list)):
    print >>f, list

f.close()

这是输出:

[0, 2, 20, 91, 114, 127]
[1, 6, 24, 114]
[2, 0, 65, 73, 91, 114]
[3, 71, 91, 120]
[4, 16, 69, 104]
[6, 1, 25, 87, 100, 114]
[7, 19, 83, 111]
[9, 38, 59, 72, 76]
[11, 56, 101, 108]
[12, 86, 92, 126]
[13, 30, 79, 82, 101, 104]
[14, 78, 103, 124]
[15, 23, 44, 90, 116]
[16, 4, 97, 106, 108]
[17, 19, 85, 111]
[18, 47, 60, 68, 74]

有没有办法以这种格式打印?

0, 2, 20, 91, 114, 127
1, 6, 24, 114

我试过了

print>>f, "".join(list)

但它不起作用,因为它是一个 numpy64 浮点数列表。

【问题讨论】:

    标签: python arrays printing spacing


    【解决方案1】:

    您想首先从列表的每个成员中创建字符串。试试

    print >>f, ', '.join(map(str,list))
    

    另外,不要命名变量list

    【讨论】:

    • +1。强制执行该行为的一个好方法是从您的代码中删除 list。 :)
    【解决方案2】:

    试试

    ",".join(str(i) for i in list))
    

    【讨论】:

      【解决方案3】:

      hacky 修复:

      print(str(list).replace(']','').replace('[',''))
      

      【讨论】:

        【解决方案4】:

        将它们转换为字符串应该可以工作

        print >>f, ', '.join(str(elem) for elem in my_list)
        

        正如布赖恩所说,不要打电话给你的名单list

        【讨论】:

          【解决方案5】:

          如果 list 是一个 numpy 浮点数组:

          list.astype('str')
          

          或者——你也可以用csv快速写np.arrays:

          import csv
          import numpy as np
          
          a = np.random.uniform(0,10,size = (5,5))
          writer = csv.writer(open('txtfile.txt','wb'))
          writer.writerows(a)
          

          生成 txt 文件:

          3.55183065126,1.05649949199,5.15510365109,1.0369928554,7.66646909667
          9.5145737219,1.53877245296,5.53917128683,1.55343228883,8.78227048275
          5.80408228776,2.58788175555,0.502704494319,1.63833152952,3.59898531148
          2.94430872526,2.42069917781,5.75920106752,2.42453222446,1.73308148034
          1.9579612159,0.609573767011,3.87717828624,7.86853109668,7.41038950637
          

          或者如果你想要整数,添加:

          writer.writerows(a.astype(int))
          

          会产生

          2,0,3,4,1
          9,5,4,4,3
          9,7,6,4,2
          3,5,7,2,0
          6,0,2,7,7
          

          【讨论】:

            【解决方案6】:

            首先,您应该在处理文件时使用with statement,以确保即使程序在完成之前遇到错误也会自动关闭它们。其次,您可以将for i in range(len(my_list))my_list[i] 替换为for i in my_listi。此外,拥有一个名为list 的变量会覆盖内置类型列表。通常的做法是使用尾随下划线来避免这种情况。

            这段代码应该可以工作(虽然我目前没有安装 Numpy 来测试它)

            with open("myfilename.txt","w") as f:
                for i in my_particles:
                    list_ = []
                    list_.append(i.n)
            
                    for j in value.neighbours:
                        list_.append(j)
            
                    f.write(", ".join(str(n) for n in list_))
            

            请注意,这将删除文件的先前内容。如果您不希望这样,请在打开函数中使用“a”而不是“w”打开文件。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-07-27
              • 2022-01-05
              相关资源
              最近更新 更多