假设我有:
a = [1,2,1,3,2,2]
b = [4,7,9,5,6,11]
I am expecting
c = [[4,9],[7,6,11],[5]]
正如您所见,生成的子列表位于列表 a
所指示的索引处。在Python中应该如何实现呢?
defaultdict
:>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> a = [1,1,1,2,2,3]
>>> b = [4,7,9,5,6,11]
>>> for k,v in zip(a,b):
... d[k].append(v)
...
>>>[x[1] for x in sorted(d.items())]
[[4, 7, 9], [5, 6], [11]]
defaultdict
可以帮助你避免初始化字典键的麻烦。如果没有先确保 d[k]
是一个列表(例如,if k not in d: d[k] = []
),那么 d[k].append(v)
将会引发 KeyError
异常。 - dirn如果我理解正确,我只需要循环遍历这些术语:
def combine(a,b):
c = [[] for _ in range(max(a))]
for i, elem in zip(a, b):
c[i-1].append(elem)
return c
这提供了
>>> a = [1, 1, 1, 2, 2, 3]
>>> b = [4, 7, 9, 5, 6, 11]
>>> combine(a,b)
[[4, 7, 9], [5, 6], [11]]
>>> a = [1,2,1,3,2,2]
>>> b = [4,7,9,5,6,11]
>>> combine(a,b)
[[4, 9], [7, 6, 11], [5]]
a
中的负值将无法正常工作。 - jamylak
a
和b
是列表,而你的最终输出c
是一个列表的列表,因此它不能成为一个Numpy数组,因为它的形状不统一。 - askewchana
会一直按那样增加吗? - DSMa
中的项目是否总是按排序顺序排列?它可能是a=[1,1,1,2,2,3,3,1,2....]
吗? - ovgolovin