python正数和负数列表的可能性

wil*_*set 4 python list

我正在尝试在Python中创建一个函数,它将整数列表作为输入,并返回一个包含这些数字的所有正面和负面可能性的更大列表.

假装'+'是正数,' - '是负数

输出应符合:

foo([-4])
>>> [ [4], [-4] ]

foo([+, +])
>>> [ [+,+], [+,-], [-,+], [-,-] ]

foo([-, +])
>>> [ [+,+], [+,-], [-,+], [-,-] ]

foo([-1, 3])
>>> [ [1,3], [1,-3], [-1,3], [-1,-3] ]

foo( [+,-,+] )
>>> [ [-,-,-],[+,-,-],[-,+,-],[-,-,+],[+,+,-],[+,-,+],[-,+,+],[+,+,+] ]
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 10

对于正好数字,您可以itertools.product在生成包含正数和负数的列表后用于创建所有组合:

from itertools import product

def foo(nums):
    return list(product(*((x, -x) for x in nums)))
Run Code Online (Sandbox Code Playgroud)

演示:

>>> foo([-4])
[(4,), (-4,)]
>>> foo([-1, 3])
[(1, 3), (1, -3), (-1, 3), (-1, -3)]
>>> foo([1, 3])
[(1, 3), (1, -3), (-1, 3), (-1, -3)]
>>> foo([1, -3, 4])
[(1, 3, 4), (1, 3, -4), (1, -3, 4), (1, -3, -4), (-1, 3, 4), (-1, 3, -4), (-1, -3, 4), (-1, -3, -4)]
Run Code Online (Sandbox Code Playgroud)


use*_*ica 6

list(itertools.product(*([x, -x] for x in input)))
Run Code Online (Sandbox Code Playgroud)

您希望以一种可能的方式为输入中的每个数字选择数字或其负数.这就是笛卡尔乘积{x[i], -x[i]}每个x[i]输入.itertools.product可以为你做到这一点,然后list列出所有输出.