目前我有两个清单
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循环的,有什么建议吗?提前谢谢。
答案 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]