gpt4 book ai didi

用于列表选择组合列表的 Python 代码优化器

转载 作者:行者123 更新时间:2023-12-05 07:07:15 25 4
gpt4 key购买 nike

我有 python 代码可以从列表列表中找到所有可能的选择。但是当我有一个大尺寸列表时,它会提供一个更大的可能数据集。我的职能是,

def yield_combos(lst):
if not lst:
yield []
else:
for el in lst[0]:
for combo in yield_combos(lst[1:]):
yield [el] + combo

以上代码的输入,

l=[[1,2,3],[4,5,6],[0,2,7]]

输出是,

[1, 4, 0]
[1, 4, 2]
[1, 4, 7]
[1, 5, 0]
[1, 5, 2]
[1, 5, 7]
[1, 6, 0]
[1, 6, 2]
[1, 6, 7]
[2, 4, 0]
[2, 4, 2]
[2, 4, 7]
[2, 5, 0]
[2, 5, 2]
[2, 5, 7]
[2, 6, 0]
[2, 6, 2]
[2, 6, 7]
[3, 4, 0]
[3, 4, 2]
[3, 4, 7]
[3, 5, 0]
[3, 5, 2]
[3, 5, 7]
[3, 6, 0]
[3, 6, 2]
[3, 6, 7]

现在我想用一个条件来减少输出列表,所有可能的列表应该至少包含一个列表第一项。然后它应该从列表中删除以下项目,

[2,5,2]
[2,5,7]
[2,6,2]
[2,6,7]
[3,5,2]
[3,5,7]
[3,6,2]
[3,6,7]

这将有助于针对大型列表优化我的算法。我怎样才能做到这一点?

最佳答案

您可以这样修改函数:

def yield_combos(lst, includes_head_item=False):
if not lst:
if not includes_head_item:
return
yield []
else:
for el_index, el in enumerate(lst[0]):
for combo in yield_combos(lst[1:], includes_head_item or el_index == 0):
yield [el] + combo

我们使用变量 includes_head_item 来跟踪组合中是否包含任何子列表的头项。如果我们在该条件仍然为假的情况下到达终点,代码的结构使得我们不会yield,从生成的组合中删除该组合。

如果您也想为其他索引创建这样的函数(例如,确保每个组合在子列表末尾至少包含一个元素),您可以这样做:

def yield_combos(lst, included_index=0, includes_item=False):
if not lst:
if not includes_item:
return
yield []
else:
for el_index, el in enumerate(lst[0]):
for combo in yield_combos(lst[1:], included_index, includes_item or el_index == included_index):
yield [el] + combo

要完成上述至少包含最后一个元素的示例,您可以这样调用它:

yield_combos(..., 2)

关于用于列表选择组合列表的 Python 代码优化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62236931/

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