求助:如何在Python中合并三个等长字符串列表的对应元素
按位置合并等长字符串列表
你有三个元素数量相同的字符串列表,希望按对应位置合并成一个新列表,示例列表如下:
list_1 = ['inline', '', '', '', '', '', ''] list_2 = ['static', 'static', 'static', '', 'static', 'static', 'static'] list_3 = ['boolean', 'uint8', 'uint8', 'void', 'boolean', 'void', 'void']
期望输出:
print(result[0], result[1]) # Output inline static boolean, static uint8
你尝试用嵌套列表推导式合并,但得到的是所有元素的笛卡尔积,结果不符合预期:
# Joining two lists list_type_12 = [i + j for i in list_type_1 for j in list_type_2] print(list_type_12) list_type_123 = [i + j for i in list_type_12 for j in list_type_3] print(list_type_123)
解决方案
你之前的嵌套推导式会遍历所有元素的组合(笛卡尔积),而非按索引对应位置合并。正确做法是用zip()函数把三个列表中同一位置的元素配对,再对每组元素做处理:
- 用
zip(list_1, list_2, list_3)获取每个位置的三元组 - 过滤掉每组中的空字符串,避免多余空格
- 用空格将非空元素连接成一个字符串
完整代码:
list_1 = ['inline', '', '', '', '', '', ''] list_2 = ['static', 'static', 'static', '', 'static', 'static', 'static'] list_3 = ['boolean', 'uint8', 'uint8', 'void', 'boolean', 'void', 'void'] # 按位置合并并过滤空字符串 result = [' '.join([s for s in group if s]) for group in zip(list_1, list_2, list_3)] # 验证输出 print(result[0], result[1]) # 输出:inline static boolean, static uint8
运行后result的完整内容为:
['inline static boolean', 'static uint8', 'static uint8', 'void', 'static boolean', 'static void', 'static void']
内容的提问来源于stack exchange,提问作者Redal_Snake
相关产品推荐
相关产品推荐

