如何将字符串列表与列表的列表合并为目标嵌套列表?
问题:合并两个同长度列表生成目标列表
给定两个长度相同的列表:
list_1 = ['2a', '3b', '2c', '2d', ... ] list_2 = [[], [], [], ['3a'], ['3b'], ... ]
需要合并得到第三个列表,要求将两个列表对应位置的元素组合:list_1的单个元素转为列表后,与list_2对应位置的列表拼接,结果如下:
list_3 = [['2a'], ['3b'], ['2c','3a'], ['2d','3b'], ...]
尝试过的代码及错误结果
尝试过以下代码,但均未得到预期结果:
- 使用
product函数:
from itertools import product list_3 = list(product(list_1, list_2))
错误结果:生成了所有元素的笛卡尔积,而非对应位置组合:
list_3 = [('2a', []), ('3b',[]), ('2c',['3a']), ...]
- 嵌套循环与错误的列表推导式:
list_3 = [] for i in list_2: for j in list_2: list_3.append(str(i) + str(j)) list_3 = [[str(list_1[x]) + str(x)] for x in (list_1, list_2)]
错误结果:要么生成了字符串拼接的混乱结果,要么结构不符合预期:
list_3 = [['2a', '3b', '2c', '2d'...], [],[]....]
解决方案
利用zip()函数按位置配对两个列表的元素,再通过列表推导式完成拼接:
list_3 = [[item1] + item2 for item1, item2 in zip(list_1, list_2)]
代码说明
zip(list_1, list_2):将两个列表中同一索引位置的元素一一配对,比如索引0对应('2a', []),索引3对应('2d', ['3b'])[item1] + item2:把list_1中的单个字符串转为列表[item1],再和list_2中对应位置的列表拼接:- 当
item2为空列表时,结果就是[item1] - 当
item2包含元素时,自动合并为一个新列表,比如['2c'] + ['3a']得到['2c', '3a']
- 当
内容的提问来源于stack exchange,提问作者AhmadShahMassoud
相关产品推荐
相关产品推荐

