栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用生成器在Python中生成没有“反向重复”的列表排列

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用生成器在Python中生成没有“反向重复”的列表排列

我对SilentGhost的提案进行了出色的跟进-发布单独的答案,因为注释的边距太窄而无法包含代码:-)

itertools.permutations
内置(自2.6版开始)且速度很快。我们只需要一个过滤条件,对于每个条件(perm,perm
[::-1])都将接受其中的一个。由于OP表示项目始终是不同的,因此我们可以比较任意两个元素:

for p in itertools.permutations(range(3)):    if p[0] < p[-1]:        print p

打印:

(0, 1, 2)(0, 2, 1)(1, 0, 2)

之所以有效,是因为反转排列总是会翻转关系!

p[0] < p[1]
或任何其他对也可以,因此您还可以控制获得的排列的一半。

我不确定是否还有其他更有效的过滤方法。

itertools.permutations
保证书目顺序,但是书目位置
p
p[::-1]
以非常复杂的方式相关。特别是,仅在中间停下来是行不通的。

但是我怀疑(没有检查)带有2:1过滤的内置迭代器是否会胜过任何自定义实现。当然,它以简单性取胜!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/415702.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号