2013-05-10 48 views
3

假设我有通过使用第一个数组项目对条目进行索引来合并两个数组?

a = [1,2,1,3,2,2] 
b = [4,7,9,5,6,11] 

我期待

c = [[4,9],[7,6,11],[5]] 

因为你可能会看到生成的子列表是在由列表a指出的指数。我们将如何在Python中做什么?

+0

你将如何在Python做? – 2013-05-10 13:31:54

+2

你想在Numpy的解决方案?你已经标记了标签,但'a'和'b'是列表,你的最终输出'c'是一个列表列表,因为它不是一个统一的形状,所以它不能是一个numpy数组。 – askewchan 2013-05-10 13:33:27

+0

检查.......! @askewchan – erogol 2013-05-10 13:34:21

回答

2

IIUC,我只是在条件循环:

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]] 
+0

我喜欢这里的列表的想法,而不是像我的答案使用字典...... +1 – mgilson 2013-05-10 13:43:44

+0

@mgilson这将无法正常工作负值'a'然而 – jamylak 2013-05-10 13:44:17

5

你可以使用一个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]] 
+0

我只是看着doc,因为我是一个新手python编码器,它说“dict调用工厂函数以提供缺失值的子类”,对于defaultdict而言,愚蠢地看不出它的意思。你能提供一些线索吗? – erogol 2013-05-10 13:54:11

+1

'defaultdict'不需要初始化字典的密钥。 'd [k] .append(v)''会在不首先确定'd [k]'是一个列表(例如'如果k不在d:d [k] = []')中的情况下会引发'KeyError'。 – dirn 2013-05-10 14:00:28

相关问题