明智的元素连接多个列表(字符串列表)

时间:2019-06-06 14:40:10

标签: python python-3.x list concatenation

我有一个字符串列表,如下所示

lst = [['a','b','c'],['@','$','#'],['1','2','3']]

我想明智地将list元素内的每个字符串连接起来,预期输出如下:

['a@1','b$2','c#3']

lst的大小可以变化。有什么方法可以完成此任务而无需进行for循环。
我尝试使用地图,但无法正常工作。

map(str.__add__,(x for x in list))

请帮助。

3 个答案:

答案 0 :(得分:11)

这是压缩子列表并使用''.join映射生成的元组的一种方法:

list(map(''.join, zip(*lst)))
# ['a@1', 'b$2', 'c#3']

此处zip如文档所示,聚集了多个可迭代元素。通过添加*,我们将解压缩列表,这意味着该函数将改为接收zip(['a','b','c'],['@','$','#'],['1','2','3'])

现在,在每次迭代中,map''.join应用于每个聚合的可迭代对象,即,应用于每个子列表中的第一个元素,然后应用于第二个,依此类推。

答案 1 :(得分:2)

不如yatu's answer优雅,但是如果您使用的是熊猫:

import pandas as pd
pd.DataFrame(lst).sum(axis=0)

# 0    a@1
# 1    b$2
# 2    c#3
# dtype: object

熊猫系列有一种.tolist()方法来获得预期的输出:

series = pd.DataFrame(lst).sum(axis=0)
series.tolist()

# ['a@1', 'b$2', 'c#3']

答案 2 :(得分:1)

列表中的字符串也有以下问题,
1) 多余的空格 ,包括开头和结尾,
2)还必须 将字符串连接起来,并在其之间插入空格
3)列表内的列表长度总是不相同,以下示例中的长度list[0]list[1]和{{1} }是list[2]

示例列表如下:

4,4 and 3

可以通过拆分列表中的每个元素来解决第一种情况和第二种情况(默认情况下使用空格进行拆分,这将删除所有空白),然后将它们之间用单个空格连接在一起。
可以使用lst= [[' It is raining ',' Hello Mr. x',' Life is what happens','This'], ['cats and dogs','how are you','when you are busy','ends here'], ['here now ','doing today? ','making other plans ']] itertools.zip_longest完成不同长度的连接元素,如下所示:

fillvalue=''

输出如下:

from itertools import zip_longest
[' '.join(x.split()) for x in map(' '.join, zip_longest(*lst,fillvalue=''))]