gpt4 book ai didi

Python 查找满足特定条件的列表列表的子集

转载 作者:行者123 更新时间:2023-12-01 01:47:10 25 4
gpt4 key购买 nike

感谢您给我机会在这里提问。

一个小背景故事:我需要/想要找到满足某些条件的集合。这些条件可能非常复杂,但我希望能够根据一个简单的示例进行调整。

首先,让我们创建一个示例:

from itertools import permutations
perm3 = list(permutations([1,2,3,4],3))

我们根据这些数字创建长度为 3 的所有排列(例如 (1,2,3),(1,3,2),...)。现在,我想找到满足特定条件的所有子集。例如,找到所有从不存在“3”的排列的子集。仅此一点就应该很容易实现:

first_neq_3 = [tuple for tuple in perm3 if tuple[0]!= 3]

但是,显然这只给了我一个子集 - 即“最大”的子集。现在,我想找到满足这个条件的所有子集。一个简短的例子,假设first_neq_3 = [(1,2,3),(2,1,3),(1,3,2),(2,3,1)] - 那么我还想找到[ (1,2,3),(2,1,3)]等等。
我承认,对于所提供的示例来说,这是一个非常简单的问题,但我陷入了困境,并且随着条件的复杂化,问题变得更加复杂。

最佳答案

如果我理解正确,您需要上面列表 first_neq_3 的所有子集(所有可能的长度)。然后您可以使用下面的代码获取它们

from itertools import combinations
sum(map(lambda r: list(combinations(first_neq_3, r)), range(1, len(first_neq_3)+1)), [])

说明

这里的关键是map函数。 itertools.combinations 为您提供给定长度的列表的所有子集。由于我们需要所有长度的子集,因此我们使用 r 作为运行所有可能长度的虚拟变量来执行该操作。由于 map 的第一个参数必须是函数,因此使用 lambda 表达式很方便。

关于Python 查找满足特定条件的列表列表的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51177071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com