首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自两个列表的数字对

来自两个列表的数字对
EN

Stack Overflow用户
提问于 2019-04-15 01:34:19
回答 2查看 541关注 0票数 3

我有两个列表:

代码语言:javascript
复制
a = [1,3,6,10,20] 
b = [2,4,9,12,15,22,24,25] 

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

  • 左值l,..用法:a[i]
  • The right ..,r:如果存在a[i+1],则为a[i]a[i+1]之间的b中的最大数字,否则仅大于a[i],如果存在a[i],则仅大于带有0 < i < max(len(a),len(b))

a[-1]

结果将如下所示:

代码语言:javascript
复制
pair = [[1,2],[3,4],[6,9],[10,15],[20,25]]

有人知道怎么做吗?

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

代码语言:javascript
复制
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)])

这很好,因为它可以完成工作,但我想知道,是否有更好,更有效的方法来做这件事?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-15 01:56:31

您可以执行二进制搜索,因为数组是排序的,所以您不必搜索a[i] < b[j],只搜索a[i+1] > b[j] (如果b中没有a[i] < b < a[b+1]这样的元素,此代码将返回无效结果):

代码语言:javascript
复制
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])))

代码语言:javascript
复制
[(1, 2), (3, 4), (6, 9), (10, 15), (20, 25)]
票数 1
EN

Stack Overflow用户

发布于 2019-04-15 02:23:14

这是另一种方法:

代码语言:javascript
复制
a = [1,3,6,10,20] 
b = [2,4,9,12,15,22,24,25]

merged = sorted(a + b, reverse=True)
mask = [(False, True)[x in a] for x in merged]


flag = True
good = []
for m, n in zip(mask, merged):
    if m is flag:
        continue
    else:
        good.append(n)
        flag = not flag

pairs = list(zip(good[1::2], good[::2]))[::-1]
pairs
>>> [(1, 2), (3, 4), (6, 9), (10, 15), (20, 25)]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55678141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档