嵌套while循环只迭代一次
问题描述:
我已经写了一些代码,它从csv文件中获取数据,将它存储在列表中,然后迭代仅返回我需要的信息的数据。 我是有工作单列表:嵌套while循环只迭代一次
# Import modules
import csv
import datetime
# import numpy as np
import matplotlib.pyplot as plt
# Time code (as slow to run)
tin = []
tout = []
tin = datetime.datetime.now() #tic
plt.close()
# Assign variables
pktime = []
pkey1 = []
pkey2 = []
pkey3 = []
pkey4 = []
pkey5 = []
pkey6 = []
pkeys=[pkey1, pkey2, pkey3, pkey4, pkey5, pkey6]
delt1 = []
delt2 = []
delt3 = []
delt4 = []
delt5 = []
delt6 = []
delts=[delt1, delt2, delt3, delt4, delt5, delt6]
pkey1full=[]
pkey2full=[]
pkey3full=[]
pkey4full=[]
pkey5full=[]
pkey6full=[]
pkeyfull=[pkey1full, pkey2full, pkey3full, pkey4full, pkey5full, pkey6full]
# Read in PK weight/deltaT/time values
with open('PKweight.csv') as pkweight:
red = csv.reader(pkweight)
for t, pk1, pk2, pk3, pk4, pk5, pk6, dt1, dt2, dt3, dt4, dt5, dt6 in red:
pktime.append(datetime.datetime.strptime(t,'%H:%M:%S'))
pkey1.append(float(pk1))
pkey2.append(float(pk2))
pkey3.append(float(pk3))
pkey4.append(float(pk4))
pkey5.append(float(pk5))
pkey6.append(float(pk6))
delt1.append(float(dt1))
delt2.append(float(dt2))
delt3.append(float(dt3))
delt4.append(float(dt4))
delt5.append(float(dt5))
delt6.append(float(dt6))
#calculate the pkweight for each cell, then append it to pkey*full
def pkweight1_calc():
i=1
while i<=(len(pkey1)-1):
if pkey1[i] == 0.0 and pkey1[i-1]!=0.0:
pkey1full.append(pkey1[i-2])
i+=1
pkey1full.reverse()
return pkey1full
pkweight1_calc()
我这个代码写出来的6次完成对每个数据集(1-6)的功能,但是,我想拥有这一切作为一个功能。我一直在使用一个while循环中嵌套while循环试过,但它只返回列表中的一个,无论j的inital值:
def pkweight_calc():
i=1
for j in range(0,5):
while i<=(len(pkeys[j])-1):
if (pkeys[j][i]) == 0.0 and (pkeys[j][i-1])!=0.0:
pkeyfull[j].append(pkeys[j][i-2])
i+=1
pkeyfull[j].reverse()
pkweight_calc()
谁能帮助我?提前致谢!! 编辑 - 更新缩进,对不起!
答
感谢您的帮助,我设法找到可以帮助我的工作人员。他不是知道为什么,但改变而循环
while i<=(len(pkeys[j])-1):
的for循环:
for i in range(2, len(pkeys[j])):
解决它。不知道为什么,但它!
这是您在代码中的实际缩进吗?因为正如书面它是一个无限循环。 – khelwood
也看看这行'pkey1full.append(pkey1 [i-2])',是不是它试图访问pkey1 [-1]'i = 1'? – Fallen
为什么你写成一个无限循环。实际上你需要的是 –