首页 > 解决方案 > 如何重新排列第一个元素包含多个值的列表列表,并在重复第一个元素的同时创建一个新的列表列表?

问题描述

给定一个列表列表:

list_format = [['a', 'c', 'f', 'b'], ['j', 'l', 'o', 'c'], ['q', 's', 'v', 'e']]


'c', 'f', 'b' 必须映射到 'a'
'l', 'o', 'c' 必须映射到 'j'
's', 'v', 'e' 必须映射到'q'

输出应如下所示:

[['a','c'],['a','f'],['a','b'],['j','l'],['j','o'],['j','c'],['q','s'],['q','v'],['q','e']]

到目前为止我已经尝试过:

list_dict = {element[0]:element[1:] for element in list_format}
newer_lst = []

for key, value in list_dict.items():
    newer_lst.append((key, value))

newer_lst


给我元组的输出:

[('a', ['c', 'f', 'b']), ('j', ['l', 'o', 'c']), ('q', ['s', 'v', 'e'])]

我在这方面比较新,并试图重新安排,任何建议都会很棒,被反复试验困住了好几天(无数次搜索谷歌并不断谷歌搜索。我觉得我已经接近但似乎无法把它放在一起.

标签: python-3.xlistloopsdictionarymapping

解决方案


您不需要创建循环,只需在子数组上循环并即时将新子数组附加到主输出数组,例如 new_list.append([lst[0], item])

new_list = []
for lst in list_format: 
    for item in lst[1:]: 
        new_list.append([lst[0], item]) 
print(new_list)
#output                                                                                                                     
#[['a', 'c'], ['a', 'f'], ['a', 'b'], ['j', 'l'], ['j', 'o'], ['j', 'c'], ['q', 's'], ['q', 'v'], ['q', 'e']]

推荐阅读