我正在尝试将两个字符串列表合并为一个,其中第一个字符串列表应用于列表 2 的所有项目。列表的长度始终相同,但是列表 2 的子列表可以包含多个列表。
我试过使用 zip()
进行合并,如下所示:
[str(x)+'_'+str(y) for x,y in zip(list1,list2)]
但是当子列表的长度不匹配时,这不起作用。
这是我想做的一个例子:
list1 = ['H1','H2','H3','H4']
list2 = ['item1',['item2','item3'],['item4','item5','item6'],['item7','item8']]
输出应该是:
list = ['H1_item1',['H2_item2','H2_item3'],['H3_item4','H3_item5','H3_item6'],['H4_item7','H4_item8']]
最佳答案
您可以使用以下方法:
['%s_%s'%(x,y) if isinstance(y,str) else ['%s_%s'%(x,yi) for yi in y]
for x,y in zip(list1,list2)]
这会产生:
>>> ['%s_%s'%(x,y) if isinstance(y,str) else ['%s_%s'%(x,yi) for yi in y]
... for x,y in zip(list1,list2)]
['H1_item1', ['H2_item2', 'H2_item3'], ['H3_item4', 'H3_item5', 'H3_item6'], ['H4_item7', 'H4_item8']]
代码的工作原理如下:我们使用 - 就像您自己做的那样 - zip(list1,list2)
来生成两个列表的元素对。现在,对于每一对,我们评估第一行中所写的三元运算符。
三元运算符将首先检查 isinstance(y,str)
是否成立(我们检查 y
是否为字符串)。如果是这样,我们只需将 %s_%s%(x,y)
添加到列表中。如果不是,我们评估列表理解['%s_%s'%(x,yi) for yi in y]
。这里我们遍历y
的每个 元素yi
,然后我们添加%s_%s%(x,yi)
到子列表。
关于python - 将列表与不同大小的子列表组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45216037/