在python中链接两个不同长度的相关列表

在python中链接两个不同长度的相关列表,python,list,Python,List,我有两个INT列表: 乙二醇 列表a持续增加8,而列表b更随机(例如有时记录两个整数) 基本上,我想做的是生成一个dict,将这两个链接起来,这样a[i]=b[i]我想你在寻找这样的东西: >>> a = [ 8, 16, 24, 32 ] >>> b = [1, 2, 2, 3, 12, 16] >>> [a[0] if a[0] < x and [a.pop(0)] else a[0] for x in b ] [8, 8, 8,

我有两个INT列表: 乙二醇

列表a持续增加8,而列表b更随机(例如有时记录两个整数)


基本上,我想做的是生成一个dict,将这两个链接起来,这样a[i]=b[i]我想你在寻找这样的东西:

>>> a = [ 8, 16, 24, 32 ]
>>> b = [1, 2, 2, 3, 12, 16]
>>> [a[0] if a[0] < x and [a.pop(0)] else a[0] for x in b ]
[8, 8, 8, 8, 16, 16]
易于阅读的版本:

>>> it = iter(a)
>>> prev = next(it)
>>> result = []
for x in b:
    if x <= prev:
        result.append(prev)
    else:
        prev = next(it)
        result.append(prev)
...         
>>> result
[8, 8, 8, 8, 16, 16]
it=iter(a) >>>上一个=下一个(it) >>>结果=[] 对于b中的x: 如果x>>结果 [8, 8, 8, 8, 16, 16] 作为发电机:

def make_c(a, b):
    a_idx = 0
    for elt in b:
        # while loop can be replaced with "if"
        # as long as jumps in b never skip elements in a
        while elt > a[a_idx]: 
            a_idx += 1
        yield a[a_idx]

对不起,我不明白你的问题。您想创建一个约束条件为
a
b
dict
,但将
c
列为示例解决方案,即列表。你能再说一遍这个问题吗?听起来你好像在试图建立一个列表,其中包含
b
中的索引以及
a
中的每个值。或者类似的东西。是吗?这将修改
a
不是吗?好吧,他从来没有说过他想保留
a
:-)
@2rs2ts是的,但我们可以保留一份
a
。这不是问题所在。:)当然只是想确定OP知道副作用。@2rs2ts是的。另外,
pop(0)
通常是您不想对列表执行的操作。要避免这两个问题,您可以执行
a=deque(a)
并使用
popleft()
>>> from collections import deque
>>> d = deque(a)
>>> [d[0] if d[0] < x and [d.popleft()] else d[0] for x in b ]
[8, 8, 8, 8, 16, 16]
>>> it = iter(a)
>>> prev = next(it)
>>> result = []
for x in b:
    if x <= prev:
        result.append(prev)
    else:
        prev = next(it)
        result.append(prev)
...         
>>> result
[8, 8, 8, 8, 16, 16]
def make_c(a, b):
    a_idx = 0
    for elt in b:
        # while loop can be replaced with "if"
        # as long as jumps in b never skip elements in a
        while elt > a[a_idx]: 
            a_idx += 1
        yield a[a_idx]