如何在两个列表中同时运行循环,以便循环中的每个项目都匹配?[Python]
我正在编写一个使用matplotlib绘制数据的代码。数据来自数千个文本文件。我可以写一个循环来绘制数据。现在,我想用另一个文件中的一段信息为每个绘图添加一个标签,我已将其制作成一个列表:如何在两个列表中同时运行循环,以便循环中的每个项目都匹配?[Python],python,multithreading,asynchronous,matplotlib,Python,Multithreading,Asynchronous,Matplotlib,我正在编写一个使用matplotlib绘制数据的代码。数据来自数千个文本文件。我可以写一个循环来绘制数据。现在,我想用另一个文件中的一段信息为每个绘图添加一个标签,我已将其制作成一个列表: import os import matplotlib.pylab as plt import numpy as np from datetime import datetime, timedelta time = [] t1 = [] t2 = [] t3 = [] t4 = [] t5 = [] t6
import os
import matplotlib.pylab as plt
import numpy as np
from datetime import datetime, timedelta
time = []
t1 = []
t2 = []
t3 = []
t4 = []
t5 = []
t6 = []
newdate = []
temps = open('/Users/datafile_with_temperatures.txt','r')
sepfile = temps.read().replace('\n','').split('\r')
temps.close()
for plotpair in sepfile:
data = plotpair.split('\t')
time.append(float(data[0]))
t1.append(float(data[1]))
t2.append(float(data[2]))
t3.append(float(data[3]))
t4.append(float(data[4]))
t5.append(float(data[5]))
t6.append(float(data[6]))
for datapoint in t2,t3,t4,t5,t6:
temperatures = np.array([t2,t3,t4,t5,t6]).mean(0).tolist()
os.chdir('/Users/datafile')
path = os.listdir('/Users/datafiles')
for file in path and temperature_point in temperatures:
MtoC = []
Pressure = []
readfile = open(file,'r')
datalines = readfile.read().split("\n")
useful_data = []
for line in datalines:
line = ''.join([x for x in line if x not in [",", "\r"]])
data = [float(item) for item in line.split()]
useful_data.append(data)
combined_data = [MtoC.extend(sub_list) for sub_list in useful_data]
Mass_to_charge = MtoC[::2]
Pressure = MtoC[1::2]
plt.plot(Mass_to_charge,Pressure)
plt.title(file)
plt.text(60, 1e-07, temperature_point)
plt.xlabel('Mass to Charge Ratio')
plt.ylabel('Pressure (torr)')
plt.yscale('log')
plt.ylim([1e-10,1e-05])
plt.savefig(file+'.jpg')
plt.close()
我希望列表中的温度点列在绘图上。温度点的数量与打印文本文件的数量相同。有数千个文本文件,其中包含用于绘制绘图的数据。每个文件相隔几秒钟,因为时间不是绘图中的变量。有一个文本文件,它对应于每个数据文件,具有该特定时间的温度。我想运行循环,这样它将绘制第一个数据文件,并将第一个温度点作为文本添加到绘图上,然后循环遍历每个文件并执行相同的操作。这种行为可以使用
zip
解决,然后根据需要解压缩元素。请参见以下简单示例:
l1 = [1,3,5,7,9]
l2 = [2,4,6,8,0]
for i1, i2 in zip(l1, l2):
print('First: {}, Second: {}'.format(i1, i2))
输出
First: 1, Second: 2
First: 3, Second: 4
First: 5, Second: 6
First: 7, Second: 8
First: 9, Second: 0
大宗报价
退房
izip()
类似于zip()
,但会生成一个迭代器,而zip()
会一次解析它的输入,并将一个巨大的对象传递给循环,这可能会导致较大数据集的问题,而且速度较慢
根据@cyber的评论进行编辑:这仅在Python2.x中是正确的。在Python3.x中,内置的
zip()
实现了这里的izip()
功能。Ha,也比我强。但是说真的,你应该在Python3.x中使用izip()
而不是zip()
@Conslo,所以它相当于izip
。我梦想有一天大多数人都在使用Python3.x:p“而zip()一次解析它的输入”。。。这仅适用于Python2.x
from itertools import izip
for d2,d3,d4,d5,d6 in izip(t2,t3,t4,t5,t6):
...