Python迭代和比较多个列表

时间:2017-11-06 00:28:29

标签: python python-2.7

我有两个相等长度的列表: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中的日期为。

1 个答案:

答案 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