Skip to main content
 首页 » 编程设计

python之为两个列表中的每个匹配元素添加一个列表并扩展

2025年05月04日11开发

出于某种原因,我的大脑无法正常工作。

我有两个已排序的类似列表的对象:

>>> a = [1,2,3,4] 
 
>>> b = [1,1,2,2,2,3,3,3] 

由此,我需要得到:

>>> a = [ [1,[1,1]], [2,[2,2,2]], [3,[3,3,3]], 4] 

代码方面,我在想这个......

>>> i = 0 
>>> first = True 
>>> for num in b: 
...    if num == a[i]: 
...       if first: 
...          a[i] = [a[i],[num]] 
...          first = False 
...       else: 
...          a[i][1].append(num) 
...    else: 
...       first = True 
...       if a[i+1] == num: 
...          a[i] = [a[i+1],[num]] 
...       else: 
...          print 'problem' 

但我总是感到困惑。解决这个问题的有效方法是什么?我觉得可能是递归,但我也想不通。

请您参考如下方法:

由于数据已经排序,您可以根据数字对 b 进行分组,并使用字典理解创建字典。在接下来传递键 (a) 时,您可以从字典中获取与 a 的元素对应的元素并创建一个新列表。

a, b = [1,2,3,4], [1,1,2,2,2,3,3,3] 
from itertools import groupby 
 
d = {k:list(grp) for k, grp in groupby(b)} 
# {1: [1, 1], 2: [2, 2, 2], 3: [3, 3, 3]} 
 
print [[k, d[k]] if k in d else k for k in a] 
# [[1, [1, 1]], [2, [2, 2, 2]], [3, [3, 3, 3]], 4]