我试图找到长度从1到size的所有元素组合(在示例size=5
中),并对此组合做一些事情:每个列表元素都是一对列表和其他列表。所以我要对第二个元素求和,然后将第一个列表的和转换为字符串。
for i in itertools.combinations(functions, size):
sum = [0 for k in range(2 ** n)]
str1 = ""
for j in i:
if str1 != "":
str1 += "+"
sum = [sum[k] + j[1][k] for k in range(2 ** n)]
str1 += parseFunc(j[0])
sum = [sum[k] % 2 for k in range(2 ** n)]
value=sum, str1, size
count += 1
f_out.write(str(size)+" "+str(sum)+" :"+str1+"\n")
def parseFunc(func):
str1=""
for i in range(len(func)):
if func[i] == 0:
continue
if func[i] == 1:
str1 += "x" + str(i)
if func[i] == -1:
str1 += "!x" + str(i)
if str1!="":
return str1
else:
return "1"
因此,例如,如果function [1]和function [2]组合在一起,那么我将针对它们所在的每个组合计算它们的总和。
对于较大的数字来说太困难了,因为function [i] [1]可以包含32个或更多的元素。 有没有短时间尝试可以使计算更好而又不对组合的相同部分进行多次求和?
以下是功能输入数据的示例:
functions=[[[(0, 0), [1, 1, 1, 1]], [(0, 1), [0, 1, 0, 1]], [(1, 0), [0, 0, 1, 1]], [(1, 1), [0, 0, 0, 1]]], [[(0, 0), [1, 1, 1, 1]], [(0, -1), [1, 0, 1, 0]], [(1, 0), [0, 0, 1, 1]], [(1, -1), [0, 0, 1, 0]]], [[(0, 0), [1, 1, 1, 1]], [(0, 1), [0, 1, 0, 1]], [(-1, 0), [1, 1, 0, 0]], [(-1, 1), [0, 1, 0, 0]]], [[(0, 0), [1, 1, 1, 1]], [(0, -1), [1, 0, 1, 0]], [(-1, 0), [1, 1, 0, 0]], [(-1, -1), [1, 0, 0, 0]]]]
n=2