gpt4 book ai didi

Python 以特定顺序生成子列表 - itertools?

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

我想以特定方式和特定顺序生成子列表。

算法思路如下:

  • 外层循环:移除最后一项
  • 内循环:移除第一项

这是一个以 [A, B, C ,D] 列表开头的示例:

[A, B, C, D]
[B, C, D] (remove first item)
[C, D] (remove first item)
[A, B, D] (remove before last item)
[B, D] (remove first item)
[A, D] (remove before last item)
[D] (remove before last item)

我唯一的限制是,仅包含最后一项的长度为 1 的子列表必须是最后生成的子列表。

我以简单的迭代方式实现这个算法没有任何困难。但我更愿意以更 pythonic 的方式来做,比如列表理解或 itertools lib。

有什么建议吗?

最佳答案

可以通过双重嵌套理解+一些索引数学来完成:

>>> data = ['A', 'B', 'C', 'D']
>>>
>>> [data[i:j-1]+[data[-1]] for j in range(len(data),0,-1) for i in range(0, j-1)] + [data[-1]]
[['A', 'B', 'C', 'D'], ['B', 'C', 'D'], ['C', 'D'], ['A', 'B', 'D'], ['B', 'D'], ['A', 'D'], ['D']]

最后一个元素是一个特例,因为其组合前面的子列表是空的,即列表切片的长度按以下方式减少:

3 2 1
2 1
1
0

关于Python 以特定顺序生成子列表 - itertools?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56113576/

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