Python 使用整数元素及其逆元素生成列表的所有可能组合

Python 使用整数元素及其逆元素生成列表的所有可能组合,python,Python,我试图找出一种方法,在给定一个充满整数和每个元素的倒数的列表的情况下,生成列表中所有可能的元素组合 我试图生成这个列表的所有可能的排列,然后通过执行0-element使其中一个元素反转,但这不是我想要的 def置换(列表): #如果列表为空,则没有排列 如果len(a_列表)==0: 返回0 #如果只有一个元素,那么只有一个排列是可能的 如果len(a_列表)==1: ret=[] ret.append([a_列表[0]]) ret.append([-a_列表[0]]) 回程网 临时列表=[]

我试图找出一种方法,在给定一个充满整数和每个元素的倒数的列表的情况下,生成列表中所有可能的元素组合

我试图生成这个列表的所有可能的排列,然后通过执行0-element使其中一个元素反转,但这不是我想要的

def置换(列表):
#如果列表为空,则没有排列
如果len(a_列表)==0:
返回0
#如果只有一个元素,那么只有一个排列是可能的
如果len(a_列表)==1:
ret=[]
ret.append([a_列表[0]])
ret.append([-a_列表[0]])
回程网
临时列表=[]
#迭代输入列表并计算置换
对于范围(0,len(a_列表))中的i:
如果列表[i].isnumeric():
val=int(列表[i])
#~n=-n-1
#val=~val+1
val=0-val
rem_list=a_list[:i]+a_list[i+1:]
其他:
打印(“非数值”)
打破
#生成所有排列,其中val是第一个元素
对于排列中的p(rem_列表):
临时列表追加([val]+list(p))
返回临时列表
#司机
数据=列表('12345')
对于排列中的p(数据):
印刷品(p)
例如,给定列表[1,2,3,4,5],我想返回(或简单打印)以下所有列表:

[[1, 2, 3, 4, 5], [1, 2, 3, 4, -5], 
[1, 2, 3, -4, 5], [1, 2, 3, -4, -5], 
[1, 2, -3, 4, 5], [1, 2, -3, 4, -5], 
[1, 2, -3, -4, 5], [1, 2, -3, -4, -5], 
[1, -2, 3, 4, 5], [1, -2, 3, 4, -5], 
[1, -2, 3, -4, 5], [1, -2, 3, -4, -5], 
[1, -2, -3, 4, 5], [1, -2, -3, 4, -5], 
[1, -2, -3, -4, 5], [1, -2, -3, -4, -5], 
[-1, 2, 3, 4, 5], [-1, 2, 3, 4, -5], 
[-1, 2, 3, -4, 5], [-1, 2, 3, -4, -5], 
[-1, 2, -3, 4, 5], [-1, 2, -3, 4, -5], 
[-1, 2, -3, -4, 5], [-1, 2, -3, -4, -5], 
[-1, -2, 3, 4, 5], [-1, -2, 3, 4, -5], 
[-1, -2, 3, -4, 5], [-1, -2, 3, -4, -5], 
[-1, -2, -3, 4, 5], [-1, -2, -3, 4, -5], 
[-1, -2, -3, -4, 5], [-1, -2, -3, -4, -5]]
与:

与:

制作一个“反向”和zip的列表,以获得对,并使用

制作一个“反向”和zip的列表,以获得对,并使用


你能解释一下这一行吗?
result=list(product(*zip(lst,inverse_lst))
?zip允许你一次遍历两个列表。当我用它的逆运算压缩lst时,我基本上是在对中进行迭代。然后,我们使用
*
来解包,这是一种通过将单个类似列表的对象解包为逗号分隔的参数来向函数传递多个参数的方法。这实际上是将4个参数传递给itertools product,该产品用于从每个参数/参数对中每次获取1个元素生成所有“产品”。您能否解释这一行
result=list(product(*zip(lst,inverse_lst))
?zip允许您一次迭代两个列表。当我用它的逆运算压缩lst时,我基本上是在对中进行迭代。然后,我们使用
*
来解包,这是一种通过将单个类似列表的对象解包为逗号分隔的参数来向函数传递多个参数的方法。实际上,它将4个参数传递给itertools产品,该产品用于从每个参数/对中每次获取1个元素生成所有“产品”。
import itertools

a = [1,2,3,4]
list(itertools.product(*[[x, -x] for x in a]))
[(1, 2, 3, 4),
 (1, 2, 3, -4),
 (1, 2, -3, 4),
 (1, 2, -3, -4),
 (1, -2, 3, 4),
 (1, -2, 3, -4),
 (1, -2, -3, 4),
 (1, -2, -3, -4),
 (-1, 2, 3, 4),
 (-1, 2, 3, -4),
 (-1, 2, -3, 4),
 (-1, 2, -3, -4),
 (-1, -2, 3, 4),
 (-1, -2, 3, -4),
 (-1, -2, -3, 4),
 (-1, -2, -3, -4)]
from itertools import product
lst = [1, 2, 3, 4]
inverse_lst = [-x for x in lst]
result = list(product(*zip(lst, inverse_lst)))

print(result)
[(1, 2, 3, 4),
 (1, 2, 3, -4),
 (1, 2, -3, 4),
 (1, 2, -3, -4),
 (1, -2, 3, 4),
 (1, -2, 3, -4),
 (1, -2, -3, 4),
 (1, -2, -3, -4),
 (-1, 2, 3, 4),
 (-1, 2, 3, -4),
 (-1, 2, -3, 4),
 (-1, 2, -3, -4),
 (-1, -2, 3, 4),
 (-1, -2, 3, -4),
 (-1, -2, -3, 4),
 (-1, -2, -3, -4)]