gpt4 book ai didi

python - 来自两个列表的数字对

转载 作者:行者123 更新时间:2023-11-28 16:58:54 26 4
gpt4 key购买 nike

我有两个列表:

a = [1,3,6,10,20] 
b = [2,4,9,12,15,22,24,25]

现在,我想创建一个新列表,其中包含前两个列表中的对。这些对定义如下:

  • 左值 [l,..] : a[i]
  • 右边的[..,r]:b中的最高数在 a[i] 之间和 a[i+1]如果a[i+1]存在,否则只是大于 a[i] , 如果 a[i]存在,否则只是大于 a[-1]0 < i < max(len(a),len(b))

结果应该是这样的:

pair = [[1,2],[3,4],[6,9],[10,15],[20,25]]

有人知道怎么做吗?

这是我到目前为止所做的:

a = [1,3,6,10,20] 
b = [2,4,9,12,15,22,24,25]

pairs = []
counter = 0
for i in range(max(len(a),len(b))):

try:
# get a[i]
ai = a[i]
except:
ai = a[-1]

try:
# get a[i+1]
ai1 = a[i+1]
except:
ai1 = b[-1]+1

temp = []
for bi in b:

if ai < bi and bi < ai1:
temp.append(bi)

# Avoid adding the last element of b again and again until i = len(b)
if max(temp) == b[-1]:
counter = counter +1

if counter <= 1:
print(max(temp))
pairs.append([ai,max(temp)])

没关系,因为它完成了工作,但我想知道,是否有更好、更有效的方法来完成它?

最佳答案

您可以进行二进制搜索,因为数组已排序,您不必搜索 a[i] < b[j] , 仅适用于 a[i+1] > b[j] (如果 b 中没有满足 a[i] < b < a[b+1] 的元素,此代码将返回无效结果):

import bisect

def pairs(a, b):
for (a1, a2) in zip(a, a[1:]):
yield a1, b[bisect.bisect_left(b, a2) - 1]

yield a[-1], b[-1]

print(list(pairs([1,3,6,10,20], [2,4,9,12,15,22,24,25])))

[(1, 2), (3, 4), (6, 9), (10, 15), (20, 25)]

关于python - 来自两个列表的数字对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55678141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com