合并字符串列表和列表列表

时间:2015-08-20 12:20:05

标签: python list

这可能是重复但我无法找到具体的答案。

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

我的问题:

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']]

它的工作原理是因为我在连接之前将字符串列表放入列表中并避免 TypeError:无法连接' str'和'列出'对象

有更优雅的解决方案吗?

2 个答案:

答案 0 :(得分: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')

答案 1 :(得分:0)

如果你想要一个表达式,我想不出比上面使用zip更好的东西。如果你想明确地将la中的元素元素插入lb的元素中,我会做

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

避免了解拉链是什么或做什么。也许还先检查一下:

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

没有它,当lb比la长时,它将“工作”。 BTW这不是完全相同的角落案例/鸭子打字。使用insert似乎更安全,哪种方法应仅存在于类似列表的对象,而不是“+”。

另外,纯粹个人而言,我会在上面写一行

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