Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建具有负值排列的列表_Python_List_Permutation - Fatal编程技术网

Python 创建具有负值排列的列表

Python 创建具有负值排列的列表,python,list,permutation,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]] 生成3次的乘积[1,-1],并将结果与输入列表相乘: from itertools import product values = [1, 2, 3] [[num * mul for num, mul in zi

有人能帮助创建一个给定列表中的负值列表吗

例如:

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 *

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的答案,它可以更轻松地处理可变大小的列表

为什么
[1,2,3]
不是有效的输出?但这实际上不适用于任意输入值列表。假设您现在想对
[42,81]
执行相同的操作。然后用
[1,2,4,8]
等@MartijnPieters是的,我说的你是对的。我认为如果这些值不是任意的,那么这更容易理解。你的答案更有力
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]]