创建具有负值排列的列表
create list with negative value permutation
有人可以帮助创建给定列表中包含负值的列表吗?
例如:
values = [1, 2, 3]
期望的输出是
[[-1, 2, 3], [1, -2, 3], [1, 2, -3],[-1, -2, 3], [1, -2, -3], [-1, 2, -3], [-1, -2, -3]]
生成 3 次 [1, -1]
的乘积,并将结果与您的输入列表相乘:
from itertools import product
values = [1, 2, 3]
[[num * mul for num, mul in zip(values, combo)]
for combo in product([1, -1], repeat=len(values))]
演示:
>>> from itertools import product
>>> values = [1, 2, 3]
>>> [[num * mul for num, mul in zip(values, combo)] for combo in product([1, -1], repeat=len(values))]
[[1, 2, 3], [1, 2, -3], [1, -2, 3], [1, -2, -3], [-1, 2, 3], [-1, 2, -3], [-1, -2, 3], [-1, -2, -3]]
输出顺序与您指定的略有不同,但生成的值相同,加上原始列表作为第一个元素。
另一种方法而不是有两个列表理解是这样的
from itertools import *
print [[1*x[0], 2*x[1], 3*x[2]] for x in list(product([1,-1], repeat=3))]
[[1, 2, 3], [1, 2, -3], [1, -2, 3], [1, -2, -3], [-1, 2, 3], [-1, 2, -3], [-1, -2, 3], [-1, -2, -3]]
由于您知道列表索引处的值,您只需将它们乘以 x 中的相应索引即可。然而,这不如使用两个列表推导式(如@Martijn 的答案)灵活,后者可以更轻松地处理可变大小的列表。
有人可以帮助创建给定列表中包含负值的列表吗?
例如:
values = [1, 2, 3]
期望的输出是
[[-1, 2, 3], [1, -2, 3], [1, 2, -3],[-1, -2, 3], [1, -2, -3], [-1, 2, -3], [-1, -2, -3]]
生成 3 次 [1, -1]
的乘积,并将结果与您的输入列表相乘:
from itertools import product
values = [1, 2, 3]
[[num * mul for num, mul in zip(values, combo)]
for combo in product([1, -1], repeat=len(values))]
演示:
>>> from itertools import product
>>> values = [1, 2, 3]
>>> [[num * mul for num, mul in zip(values, combo)] for combo in product([1, -1], repeat=len(values))]
[[1, 2, 3], [1, 2, -3], [1, -2, 3], [1, -2, -3], [-1, 2, 3], [-1, 2, -3], [-1, -2, 3], [-1, -2, -3]]
输出顺序与您指定的略有不同,但生成的值相同,加上原始列表作为第一个元素。
另一种方法而不是有两个列表理解是这样的
from itertools import *
print [[1*x[0], 2*x[1], 3*x[2]] for x in list(product([1,-1], repeat=3))]
[[1, 2, 3], [1, 2, -3], [1, -2, 3], [1, -2, -3], [-1, 2, 3], [-1, 2, -3], [-1, -2, 3], [-1, -2, -3]]
由于您知道列表索引处的值,您只需将它们乘以 x 中的相应索引即可。然而,这不如使用两个列表推导式(如@Martijn 的答案)灵活,后者可以更轻松地处理可变大小的列表。