python - 两个单独列表的单独组合保持对应/相互依赖
问题描述
我有两个相同长度的列表,它们具有一对一的对应关系:
a = [1,2,3,4]
b = [6,7,8,9]
我想分别找到这两个列表的组合。但是两个列表的组合元素的索引必须相同。
例如,如果我这样做:
list(itertools.combinations(a,2))
我可能会得到
[(1,2),(1,3),(1,4),(3,2),(4,2),(4,3)]
我本来可以
[(2,1),(3,1),(4,1),(2,3),(2,4),(3,4)]
也是因为两者都是一样的。
所以无论我得到什么组合,我都希望为第二个列表组合相同的索引。
因此,如果
list(itertools.combinations(a,2))
给我
[(1,2),(1,3),(1,4),(3,2),(4,2),(4,3)]
然后
list(itertools.combinations(b,2))
应该给我
[(6,7),(6,8),(6,9),(8,7),(9,7),(9,8)]
或者如果
list(itertools.combinations(a,2))
给我
[(2,1),(3,1),(4,1),(2,3),(2,4),(3,4)]
然后
list(itertools.combinations(b,2))
应该给我
[(7,6),(8,6),(9,6),(7,8),(7,9),(8,9)]
解决方案
您可以查看源代码以告诉您它是根据列表的索引而不是列表的值工作的。因此,虽然对于同一个列表,组合的输出总是相同的——颠倒列表的顺序显然会给你一个不同的组合输出。
为什么不在传递列表时对其进行排序,以便它们始终按数字递增顺序排列,从而解决问题。
a = [4,3,2,1]
list(combinations(a,2))
[(4, 3), (4, 2), (4, 1), (3, 2), (3, 1), (2, 1)]
list(combinations(sorted(a),2))
[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
https://docs.python.org/3/library/itertools.html#itertools.combinations
推荐阅读
- c# - C# 使用 SimpleJSON 写入 json 文件
- python - ElasticSearch Scroll api 问题
- c# - 如何获取每个文件夹的文件数
- c# - 如何改变每次碰撞时的音高?
- python - 在openpyxl中读取单元格编号格式
- ios - 为什么我的 SKSpriteNode 没有按照代码的意图直线移动?
- php - 正则表达式匹配字幕中的 SRT 和 VTT 语法
- ruby - 有没有办法在我的 sinatra 应用程序中使用不同的 mime 类型
- json - DjangoRestFramework:在 JsonField 中搜索和排序元素
- node.js - 调用链码时出错,节点 SDK,方法:channel.sendTransactionProposal()