2015-08-20 52 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])