在python中链接两个不同长度的相关列表
我有两个INT列表: 乙二醇 列表a持续增加8,而列表b更随机(例如有时记录两个整数)在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,
基本上,我想做的是生成一个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]