创建具有负值排列的列表

时间:2016-01-27 15:32:48

标签: python list 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]]

2 个答案:

答案 0 :(得分:2)

生成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]]

输出顺序与您指定的略有不同,但会产生相同的值,加上原始列表作为第一个元素。

答案 1 :(得分:0)

另一种方法是做这个而不是有两个列表推导就是喜欢这个

$ dredd sample-blueprint.md http://localhost:3000
info: Beginning Dredd testing...
pass: GET /task/123 duration: 42ms
complete: 1 passing, 0 failing, 0 errors, 0 skipped, 1 total
complete: Tests took 50ms

由于您知道列表索引处的值,因此可以将它们乘以x中的相应索引。然而,这并不像使用两个列表理解那样灵活,比如@ Martijn的答案,它可以更容易地处理变量大小的列表。