python - 将列表与不同大小的子列表组合

标签 python string list list-comprehension

我正在尝试将两个字符串列表合并为一个,其中第一个字符串列表应用于列表 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/

相关文章:

python - 该类(class)如何工作? (与Quantopian,Python和Pandas有关)

python - 在不使用 Plotly Express 的情况下向 Plotly 子图添加垂直矩形

c# - 在 C# 中获取 List<T> 中不同值的列表

python - 将列表列表转换为 float ,同时忽略字符串列

Python:如果字符串包含特定关键字,则从列表中删除特定字符串 v.2

python - 用于近似像素颜色变化的嵌套 For 循环的 Numpy 等效项

python - 如何从此网络服务下载多页数据?

python-3.x - Python,列表变量和字符串变量的作用域实际上不同吗?

string - 字符串的哈希函数

python - 分割一串名称