Python 将文件读入列表的for循环与列表中元素的顺序之间存在差异

Python 将文件读入列表的for循环与列表中元素的顺序之间存在差异,python,file,for-loop,Python,File,For Loop,我目前正试图从中读取光谱图文件。当我运行以下代码时,一个列表将填充来自该文件的结果。但是,行“%.12f”上打印的所有值与手动打印的元素之间存在差异:例如,正确的初始值为0.75149172533,打印列表中所有元素的for循环以0.003396112601开始。这是一个非常奇怪的区别,因为for循环似乎只生成gobbledy-gook元素,但是数组的手动索引生成了正确的元素。这不是一个大问题,因为我显然可以按顺序索引正确的元素,但这让我毛骨悚然,试图找出行为如此不同的原因 def skipTo

我目前正试图从中读取光谱图文件。当我运行以下代码时,一个列表将填充来自该文件的结果。但是,行“%.12f”上打印的所有值与手动打印的元素之间存在差异:例如,正确的初始值为0.75149172533,打印列表中所有元素的for循环以0.003396112601开始。这是一个非常奇怪的区别,因为for循环似乎只生成gobbledy-gook元素,但是数组的手动索引生成了正确的元素。这不是一个大问题,因为我显然可以按顺序索引正确的元素,但这让我毛骨悚然,试图找出行为如此不同的原因

def skipToFrame(spectrogram, offset):
  SAMPLE_RATE =22050
  HOP_LENGTH = 512
  FRAME_TIME = HOP_LENGTH/SAMPLE_RATE
  SHIFT_FRAMES = round(offset/FRAME_TIME)

  a_list = []
  with open(spectrogram) as spectrogram_file:
      for line in spectrogram_file.readlines():
          for entry in line.split(" "):
              a_list.append(float(entry))
      spectrogram_file.close()

  for entry in a_list:
      print("%.12f" % entry)
  print("list length is " + str(len(a_list)))
  print(a_list[0])

def main():
  track_left_spectrogram = "path to file"
  skipToFrame(track_left_spectrogram,1)

if __name__ == '__main__' :
  main()
预期结果应该是,在a_列表循环中的for条目中,a_列表中的值应该按照文件中的值打印出来。手动为a_列表编制索引显然给出了正确的结果,但使用for循环可能会导致元素顺序混乱或非常奇怪

a_list = []
with open("sample.txt") as f:
    for line in f.readlines():
        for entry in line.split(" "):
            a_list.append(entry)


for entry in a_list[:-2]:
    print("%.12f" % float(entry))
print("list length is " + str(len(a_list)))
print(a_list[0])
输出为

0.751491727533
2.798113439302
4.068138343604
17.569424700243
32.742568351020
23.357022526269
23.131132464710
9.801858358417
1.490128686136
0.034301546746
0.001143059877
0.000636652547
0.000168888218
0.000133326873
0.000084786511
0.000089979358
0.000030828024
0.000017362478
...
0.751491727533
请注意,当您使用带有open函数的
with
语句时,您不需要在末尾关闭该文件,因为with将自动为您关闭它

输出为

0.751491727533
2.798113439302
4.068138343604
17.569424700243
32.742568351020
23.357022526269
23.131132464710
9.801858358417
1.490128686136
0.034301546746
0.001143059877
0.000636652547
0.000168888218
0.000133326873
0.000084786511
0.000089979358
0.000030828024
0.000017362478
...
0.751491727533

请注意,当您使用带有open函数的
with
语句时,您不需要在结尾处关闭文件,因为with将自动为您关闭它

如果只打印前10个,代码似乎工作正常,它将显示正确的顺序。如果你把它们全部打印出来,我想你的终端不能显示946176行,所以它会像我的一样把它切断

用于_列表中的条目[:10]:
打印(“%.12f%”条目)

代码似乎工作正常,如果只打印前10个,它会显示正确的顺序。如果你把它们全部打印出来,我想你的终端不能显示946176行,所以它会像我的一样把它切断

用于_列表中的条目[:10]:
打印(“%.12f%”条目)

我尝试了你的代码,在for循环中打印的第一项是0.751491727533,可能你的控制台无法全部显示。我尝试了你的代码,在for循环中打印的第一项是0.751491727533,可能你的控制台无法全部显示。这就是我得到的——一系列结果,比如669,0.045132550796,而不是0.751。。。。这就是我得到的结果-一堆结果,比如669,0.045132550796,而不是0.751…好的,你似乎了解一些东西-如果我这样做,那么我得到的元素顺序正确。好的,你似乎了解一些东西-如果我这样做,那么我得到的元素顺序正确。