出于某种原因,我的大脑无法正常工作。
我有两个已排序的类似列表的对象:
>>> 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]
