我使用 itertools 从一组 10 个元素中查找所有可能的 2 元素组合(不重复),我对这些元素应用了一些过滤,以根据给定条件减少 2 元素组合
为了简单起见,假设下面的代码:10 个元素是数字 1 到 10。我使用的代码如下:
import numpy as np
M = np.array(np.transpose(np.loadtxt('C:\\py\\10.csv')))
n=2
from itertools import combinations
combos = list(filter(lambda e: ((e[0]+e[1]) > 14 ) , combinations(M, n)))
print (combos)
输出将是
[(5.0, 10.0), (6.0, 9.0), (6.0, 10.0), (7.0, 8.0), (7.0, 9.0), (7.0, 10.0), (8.0, 9.0), (8.0, 10.0), (9.0, 10.0)]
我现在试图以编程方式实现的是将上述结果压缩到一个可以生成它的 n 元素列表中。
例如,我可以说
(6.0, 9.0), (6.0, 10.0), (9.0, 10.0)
是 3 个元素列表的两个元素组合 (6,9,10)
我也可以说
(7.0, 8.0), (7.0, 9.0), (7.0, 10.0), (8.0, 9.0), (8.0, 10.0), (9.0, 10.0)
是 4 个元素 (7,8,9,10) 的列表的两个元素组合
我也可以说 (5.0, 10.0) 对它不是 10 个数字的子列表组合的结果
如果有人遇到这个问题,我想知道如何实现
所以这里有两个问题,一是压平列表,二是从列表中获取唯一的数字。
有多种方法可以做到这一点。对我的大脑来说最容易理解的就是迭代嵌套结构并将值添加到集合中:
numbers = set()
for combo in combos:
for value in combo:
numbers.add(value)
或单层:
numbers = {value for combo in combos for value in combo}