如何通过删除包含以相同模式开头的元素的列表来修改列表列表列表

2024-09-28 05:23:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表,我想通过完全删除list元素来修改它,如果它包含两个以相同模式开始的元素[在这种情况下是相同的3个字符]

例如,如果这是我的列表列表:

list_of_lists = [['aComp6', 'mot12'], ['aComp6', 'mot24'], ['mot12', 'mot24'],
                 ['mot24', 'fd_dvars'], ['mot24', 'fd_dvars_td'], 
                 ['fd_dvars', 'fd_dvars_td']]

我想从中删除这两个列表:['mot12','mot24']['fddvars','fdvars\td'],最后得到以下结果:

new_list_of_lists = [['aComp6', 'mot12'], ['aComp6', 'mot24'],
                     ['mot24', 'fd_dvars'], ['mot24', 'fd_dvars_td']]

在扩展的情况下,内部列表可以包含更多的元素,但在任何情况下,前三个字符串就足够了

我很难找到一种方法来比较每个列表中的元素


Tags: of元素列表模式情况listslisttd
2条回答

像这样的工作:

new_list_of_lists = [inner_list for inner_list in list_of_lists \
                     if len(set([x[:3] for x in inner_list])) == len(inner_list)]

换句话说,选择内部列表,其中不同的3字符前缀的数量等于元素的数量-换句话说,其中没有重复的前缀

你可以用列表来理解。假设模式总是3个字符,并且您希望将每个内部列表中的每个元素与其他元素进行比较,您可以使用以下方法

 new_lists_of_lists = [sublist for sublist in list_of_lists if not any(i[:3]==j[:3] and i!=j for i in sublist for j in sublist)]

如果模式不总是三个字符,那么将3改为任何模式

相关问题 更多 >

    热门问题