使用for循环来比较两个列表

时间:2018-01-16 23:58:34

标签: python for-loop

目前我有两个清单

a=[3768, 4893, 6007, 7131, 8246, 9373, 10485, 11610, 12722, 13845, 14960, 16085, 17198, 19262, 20388, 21494, 22614, 23727, 24850]
b=[3071, 3516, 4654, 5780, 6892, 8019, 9134, 10258, 11371, 12495, 13606, 14733, 15846, 16971, 18084, 18575, 19035, 20149, 21274, 22382]

两个列表都有不同的大小,两个列表中的所有数字都按升序排列。

我需要找到列表b(b [i])中所有元素的索引,该索引大于列表a中的元素[v](a [v])且小于元素[v + 1](列表a中的[v + 1]), 例如,

b[i]>a[v] and b[i]<a[v+1]

我不知道我是怎么写for循环的,有什么建议吗?提前谢谢。

3 个答案:

答案 0 :(得分:1)

您可以像这样使用zip

for i, (a1, a2, b1) in enumerate(zip(a, a[1:], b)):
    if b1 > a1 and b1 < a2:
        print(i)

答案 1 :(得分:1)

这是一个单行解决方案,它使用list comprehension而不是for-loop来生成所有这些索引的列表。

indexes = [i for i in range(min(len(b), len(a) - 1)) if a[i] < b[i] < a[i+1]]

请注意,我们使用min来忽略可能导致IndexOutOfRange异常的索引。

答案 2 :(得分:0)

a=[3768, 4893, 6007, 7131, 8246, 9373, 10485, 11610, 12722, 13845, 14960, 16085, 17198, 19262, 20388, 21494, 22614, 23727, 24850]
b=[3071, 3516, 4654, 5780, 6892, 8019, 9134, 10258, 11371, 12495, 13606, 14733, 15846, 16971, 18084, 18575, 19035, 20149, 21274, 22382]
for v in range(len(a)-1):
    x = []
    for i in range(len(b)):
        if b[i] > a[v]:
            if b[i] < a[v+1]:
                x.append(i)
                continue
            elif x:
                print(v, x)
            break

输出:

0 [2]
1 [3]
2 [4]
3 [5]
4 [6]
5 [7]
6 [8]
7 [9]
8 [10]
9 [11]
10 [12]
11 [13]
12 [14, 15, 16]
13 [17]
14 [18]