我有两个相等长度的列表:a和b。列表b包含几个与相同索引处的列表a相同的浮点数,但其他索引将替换为零。这些列表中还包含数千个值。
我想迭代列表b,直到它达到非零值,然后从同一索引迭代列表a,直到达到更大的值。我想然后将更大的值附加到空列表,然后继续迭代列表b,直到下一个非零值并重复。
c=[]
i = 0
j = 0
while i < len(a):
if b[i] == 0:
i = i + 1
if b[i] > 0:
j = i
if a[j] < b[i]:
j = j + 1
if a[j] == b[i]:
j = j + 1
if a[j] > b[i]:
c.append(a[j])
i = i + 1
我尝试了多种方法来执行for和while循环,最后只是将整个列表a附加到空列表中,或者创建一个无限的while循环,所以任何有关如何入门的帮助或建议都会非常感谢!
将@MichaelButscher的答案合并到此并添加另一个列表d,其中包含与列表a和b中的值对应的日期,然后我将符合条件if a[j] > b[i]:
的值的日期附加到一个新的清单e。
d=['05/01/2000','06/01/2000','07/01/2000','10/01/2000','11/01/2000','12/01/2000','23/10/2000','24/10/2000','25/10/2000','13/12/2000','14/12/2000','15/12/2000','20/02/2001','21/02/2001','21/09/2001','19/06/2002','20/06/2002']
a=[1.86,1.85,1.89,1.82,1.82,1.83,1.846,1.898,1.869,1.923,1.926,1.9677,1.959,2.02,2.802,2.7312,2.8035]
b=[0,0,1.89,0,0,0,0,0,0,0,0,1.9677,0,0,2.802,0,0]
c=[]
e=[]
i = 0
j = 0
# Run until break
while True:
while i < len(a):
if b[i] != 0:
break # break inner while
i += 1
else:
break # break outer while
# At this point: i < len(a) and b[i] != 0
j = i
while j < len(a):
if a[j] > b[i]:
# At this point: i < len(a) and b[i] != 0 and j < len(a) and a[j] > b[i]
c.append(a[j])
e.append(d[j])
break
j += 1
# At this point either appropriate j was found or j == len(a)
# Anyway, next i to check
i += 1
然后列出c和e列表:
24/10/2000 1.898
24/10/2000 1.898
21/02/2001 2.02
10/09/2001 2.606
20/06/2002 2.8035
24/09/2002 3.8132
22/09/2015 4.0667
04/09/2015 3.853
01/09/2015 3.7031
10/05/2004 3.148
有些数据是重复的,并且不按升序日期顺序排列,即使列表d中的日期为。
答案 0 :(得分:0)
这可以通过嵌套while循环来完成。外面只是永远运行(直到休息)内部,而循环检查所需的状态。
未经测试但应该有效:
c=[]
i = 0
j = 0
# Run until break
while True:
while i < len(a):
if b[i] != 0:
break # break inner while
i += 1
else:
break # break outer while
# At this point: i < len(a) and b[i] != 0
j = i
while j < len(a):
if a[j] > b[i]:
# At this point: i < len(a) and b[i] != 0 and j < len(a) and a[j] > b[i]
c.append(a[j])
break
j += 1
# At this point either appropriate j was found or j == len(a)
# Anyway, next i to check
i += 1