【发布时间】:2019-08-19 02:05:36
【问题描述】:
大家好,这是问题所在。我在输入 [[1,2,3],[4,5,6],[7,8,9]]...等中有这样的东西
我想生成这些列表的所有可能的产品组合,然后将结果组合的每个元素相乘,最终在一个区间内过滤结果。
所以先输入一个n列表[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]...等
然后会给出 (1,4,7,10) (1,4,7,11) (1,4,7,12) 等等
然后将 n 中 k 的结果组合起来,例如第一行的 (1,4,7)(1,4,10)(1,7,10)
x 的乘积为 1*4*7 = 28, 1*4*10 = 40, 1*7*10 = 70
从中只得到唯一组合和预先选择的区间内需要的结果:如果 x > 50 和 x
我试过
def mult(lst): #A function mult i'm using later
r = 1
for element in lst:
r *= element
return round(r)
s = [] #Where i add my list of list
for i in range(int(input1)):
b = input("This is line %s : " % (i+1)).split()
for i in range(len(b)):
b[i] = float(b[i])
s.append(b)
low_result = input("Expected low_result : ")
high_result = input("Expected high_result : ")
combine = []
my_list = []
for element in itertools.product(*s):
l= [float(x) for x in element]
comb = itertools.combinations([*l], int(input2))
for i in list(comb):
combine.append(i)
res = mult(i)
if res >= int(low_result) and res <= int(high_result):
my_list.append(res)
f = open("list_result.txt","a+")
f.write("%s : result is %s\n" % (i, res))
f.close()
它总是导致内存错误,因为我正在寻找的变化太多。
我想要的是一种从包含 20 个或更多元素的列表中生成所有产品的方法,并为我需要的结果(间隔)生成 n 中的 k 组合。
【问题讨论】:
-
如果您正在寻找 AXBXCX... 然后尝试获取一个子集 dim = n-1 ,不妨从选择 (n-1) 个空格开始?还是我错过了什么?
-
尝试用生成器替换列表,将 [] 替换为 () 他们会节省一些内存
-
如果 l 是一个列表,[*l] 也与 l 相同
-
我认为 numpy 会帮助你提高一些性能。但我不是 Python 数字人
-
如果我将 [] 替换为 () 它不会与组合有关,因为它会给它太多的参数不?
标签: python python-3.x