相关疑难解决方法(0)

将元组扩展为参数

有没有办法将Python元组扩展为函数 - 作为实际参数?

例如,这里expand()有魔力:

some_tuple = (1, "foo", "bar")

def myfun(number, str1, str2):
    return (number * 2, str1 + str2, str2 + str1)

myfun(expand(some_tuple)) # (2, "foobar", "barfoo")
Run Code Online (Sandbox Code Playgroud)

我知道可以定义myfunmyfun((a, b, c)),但当然可能有遗留代码.谢谢

python tuples parameter-passing

375
推荐指数
5
解决办法
20万
查看次数

如何将itertools.product应用于列表列表的元素?

我有一个数组列表,我想获得数组中元素的笛卡尔积.

我将用一个例子来说明这个更具体......

itertools.product似乎可以做到这一点,但我陷入了一些细节.

arrays = [(-1,+1), (-2,+2), (-3,+3)];
Run Code Online (Sandbox Code Playgroud)

如果我做

cp = list(itertools.product(arrays));
Run Code Online (Sandbox Code Playgroud)

我明白了

cp = cp0 = [((-1, 1),), ((-2, 2),), ((-3, 3),)]
Run Code Online (Sandbox Code Playgroud)

但我想得到的是

cp1 = [(-1,-2,-3), (-1,-2,+3), (-1,+2,-3), (-1,+2,+3), ..., (+1,+2,-3), (+1,+2,+3)].
Run Code Online (Sandbox Code Playgroud)

我尝试了一些不同的东西:

cp = list(itertools.product(itertools.islice(arrays, len(arrays))));
cp = list(itertools.product(iter(arrays, len(arrays))));
Run Code Online (Sandbox Code Playgroud)

他们都让我CP0代替CP1.

有任何想法吗?

提前致谢.

python cartesian-product python-itertools

39
推荐指数
2
解决办法
5万
查看次数

大型迭代器的笛卡尔积(itertools)

从前一个问题我学到了一些有趣的东西.如果Python itertools.product是由一系列迭代器提供的,那么这些迭代器将在笛卡尔积开始之前转换为元组.相关 问题查看源代码,itertools.product得出结论:虽然没有中间结果存储在内存中,但是在产品迭代开始之前创建了原始迭代器的元组版本.

问题:当(元组转换的)输入太大而无法保存在内存中时,有没有办法为笛卡尔积创建迭代器?琐碎的例子:

import itertools
A = itertools.permutations(xrange(100))
itertools.product(A)
Run Code Online (Sandbox Code Playgroud)

一个更实际的用例将采用一系列(*iterables[, repeat])类似于函数的原始实现 - 上面只是一个例子.它看起来不像你可以使用当前的实现itertools.product,所以我欢迎在纯python中提交(虽然你不能击败C后端itertools!).

python memory cartesian-product python-itertools

14
推荐指数
1
解决办法
3570
查看次数