2015-08-20 31 views
3

这可能是重复的,但我找不到具体答案。合并字符串列表和列表列表

我在撰写这个问题时也找到了一个答案,但是想知道是否有更好的选项或工作时不知道哪个项目是字符串列表。

我的问题:

la=['a', 'b', 'c'] 
lb=[['d','e'], ['f','g'], ['i','j']] 

我想:

[['a','d','e'], ['b','f','g'], ['c','i','j']] 

我发现专门针对我的例子下面的作品;

la=['a', 'b', 'c'] 
lb=[['d','e'], ['f','g'], ['i','j']] 
[ [x] + y for x,y in zip(la, lb)] 
[['a', 'd', 'e'], ['b', 'f', 'g'], ['c', 'i', 'j']] 

它的工作原理,因为我做的字符串列表到一个列表在连接前,避免了类型错误:不能连接“海峡”和“名单”对象

是否有一个更优雅的解决方案?

+4

不是一个自然的,1线的解决方案是什么更优雅? –

+1

@JohnColeman同意,并没有比这个好得多 – hschne

+1

@hSchroedl这个解决方案非常自然,所以我把它写下来并在30秒内将它作为答案提交,在阅读问题的第一部分之后,马上删除了我的答案当我看到OP已经有了这个解决方案时,这让我想到了这个问题的关键。 –

回答

0

您可以使用numpy.column_stack

>>> la=['a', 'b', 'c'] 
>>> lb=[['d','e'], ['f','g'], ['i','j']] 
>>> import numpy as np 

>>> np.column_stack((la,lb)) 
array([['a', 'd', 'e'], 
     ['b', 'f', 'g'], 
     ['c', 'i', 'j']], 
     dtype='|S1') 
+0

为什么要投票?我的回答有问题吗?我很乐意听到我的错误! – Kasramvd

0

如果你想,我想不出有什么比使用上述拉链更好的表现。如果你想在他们的头上明确插入来自LA的元素元素融入磅的元素,我会做

for i in range(len(la)): 
    lb[i].insert(0, la[i]) 
这避免了必须知道什么是zip文件或做

。也许还首先检查:

if len(la) != len(lb) : raise IndexError, "List lengths differ" 

没有,它会“工作”,当磅比la长。顺便说一句,这不完全相同的角落案件/鸭打字。似乎更安全的使用插入,该方法应该只存在于类似列表的对象,而不是“+”。

此外,纯粹的个人而言,我会写上一行

for i in range(len(la)): lb[i].insert(0, la[i])