将任意数量的列表中的元素连接到一个字符串列表中

2024-10-04 01:28:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将两个列表的元素合并到一个列表中,并添加一些字符,如下所示:

list_1 = ['some1','some2','some3']
list_2 = ['thing1','thing2','thing3']

joined_list = ['some1_thing1', 'some2_thing2', 'some3_thing3']

然而,我不知道事先有多少名单,我将不得不这样做,也就是说,我想这样做,为一个任意数量的名单

另外,我目前收到的列表如下:

list_A = [('some1','thing1'),('some2','thing2'),('some3','thing3')]

所以我把它分成这样的列表:

list_B = [i for i in zip(*list_A)]

我这样做是因为有时我有一个int而不是字符串

list_A = [('some1','thing1',32),('some1','thing1',42),('some2','thing3', 52)] 

所以我以后可以这样做

list_C = [list(map(str,list_B[i])) for i in range(0,len(list_B)]

基本上list_1list_2list_C的元素。你知道吗

那么,有没有更有效的方法来完成这一切呢?你知道吗


Tags: in元素列表for数量字符list名单
3条回答

您可以基于list_A本身splitjoin这样运行,而无需int可能的int值:

list_A = [('some1','thing1',32),('some1','thing1',42), ('some2','thing3', 52)] 
["_".join(map(str, i)) for i in list_A]

输出:

['some1_thing1_32', 'some1_thing1_42', 'some2_thing3_52']

更新:

对于您的需求,如果要忽略list_A中最后一个tuple的最后一个元素,需要在list-comprehension中添加if-else条件,如下所示:

["_".join(map(str, i)) if list_A.index(i) != len(list_A)-1 else "_".join(map(str, i[:-1])) for i in list_A  ]

更新输出:

['some1_thing1_32', 'some1_thing1_42', 'some2_thing3']

如果您使用的是python>;=3.6,请尝试以下操作:

[f'{i}_{j}' for i,j in zip(list_1, list_2)]

如果使用python3.5,可以执行以下操作:

 ['{}_{}'.format(i,j) for i,j in zip(list_1, list_2)]

如果不想使用格式化字符串,也可以使用此选项:

['_'.join([i,j]) for i,j in zip(list_1, list_2)]

对于忽略列表中每个元组的最后一个元素,我发现这是最快的方法:

["_".join(map(str, i)) for i in [x[:-1] for x in list_A] ]

相关问题 更多 >