Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在两个列表中同时运行循环,以便循环中的每个项目都匹配?[Python]_Python_Multithreading_Asynchronous_Matplotlib - Fatal编程技术网

如何在两个列表中同时运行循环,以便循环中的每个项目都匹配?[Python]

如何在两个列表中同时运行循环,以便循环中的每个项目都匹配?[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

我正在编写一个使用matplotlib绘制数据的代码。数据来自数千个文本文件。我可以写一个循环来绘制数据。现在,我想用另一个文件中的一段信息为每个绘图添加一个标签,我已将其制作成一个列表:

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):
    ...