首页 > 解决方案 > 根据另一个列表的顺序消除列表的组合

问题描述

我有一个列表,其中包含按升序排列的数字因子。我已经生成了该列表的排列,现在我需要消除与原始升序因子列表具有相同顺序的排列。

考虑例如:

Number=9
factors=1,3,9 
l=[1,3,9]

上面列表 1 的排列是我在 Python 中使用排列函数存储为列表的列表:

ll=[[1,3,9],[1,9,3],[3,1,9],[3,9,1],[9,1,3],[9,3,1]]

现在我需要以与 9 的因子相同的顺序消除具有 2 个或更多元素的组合以升序排列:从组合中删除:

[**[1,3,9]**,[**3,9**,1],[9,**1,3**]]

我只需要 :[[1,9,3],[3,1,9],[9,3,1]

请帮助解决方案,集合是无序的,因此没有选择。谢谢

标签: python

解决方案


如果排列具有原始因子列表中的一对,您可以简单地过滤。

original_pairs = {(l[i], l[i+1]) for i in range(len(l)-1)}

def has_original_pair(my_list, pairs):
    for i in range(len(my_list)-1):
        if (my_list[i], my_list[i+1]) in pairs:
            return True
    return False

filtered_ll = [x for x in ll if not has_original_pair(x, original_pairs)]  

推荐阅读