gpt4 book ai didi

python - 如何根据在 Python 中保持顺序的一个 bool 字段创建元组列表的所有排列

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:41:16 25 4
gpt4 key购买 nike

假设我有一个像这样的元组列表输入:

[('a', True),
('b', False),
('c', True),
('d', False)]

每个以 True 作为第二个参数的元组都被认为是可选的。

  • 列表中元组的数量是任意的
  • 第一个值的值是任意的,必须保留

现在我想按以下方式排列这个结构:

  • 输出应该是元组列表的列表
  • 每个元组列表都是唯一的
  • 列表根据存在或不存在的可选元组进行区分
  • False 的元组不会改变(消失)
  • 列表中元组的顺序不变
  • 元组的顺序不变
  • 元组列表可以按任何顺序排列

因此,上面示例的输出应该如下所示:

[[('a', True),
('b', False),
('c', True),
('d', False)],

[('b', False),
('c', True),
('d', False)],

[('a', True),
('b', False),
('d', False)],

[('b', False),
('d', False)]]

有什么想法可以优雅地解决这个问题吗?我尝试了递归,但无法实现。

最佳答案

我不确定是否有特别优雅的方式。从概念上讲,您需要计算可选元素的幂集,但以满足您要求的方式将其与非可选元素合并。这是一种方法:

import itertools
a = [('a', True), ('b', False), ('c', True), ('d', False)]
optional_count = sum(optional for x, optional in a)
for include in itertools.product([True, False], repeat=optional_count):
include_iter = iter(include)
print([
(x, optional)
for x, optional in a
if not optional or next(include_iter)
])

打印

[('a', True), ('b', False), ('c', True), ('d', False)]
[('a', True), ('b', False), ('d', False)]
[('b', False), ('c', True), ('d', False)]
[('b', False), ('d', False)]

循环遍历所有元组,指示是否包含可选元素:

True, True
True, False
False, True
False, False

打印语句中的列表理解包括所有非可选元素,对于可选元素,查看 include 中的下一个可用元素。

关于python - 如何根据在 Python 中保持顺序的一个 bool 字段创建元组列表的所有排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53014545/

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