[英]Join elements of an arbitrary number of lists into one list of strings 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_1
和list_2
是的元素list_C
。
那么,有沒有更有效的方法來完成所有這些工作?
如果您使用的是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)]
您可以在基本list_A
本身上join
函數,無需將其split
為可能的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']
為了忽略list_A中每個元組的最后一個元素,我發現這是最快的方法:
["_".join(map(str, i)) for i in [x[:-1] for x in list_A] ]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.