相关疑难解决方法(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万
查看次数

如何获得列表元素的所有可能组合?

我有一个包含15个数字的列表,我需要编写一些代码来生成这些数字的所有32,768种组合.

我发现了一些代码(通过谷歌搜索)显然正在寻找我正在寻找的东西,但我发现代码相当不透明并且对使用它很谨慎.另外我觉得必须有一个更优雅的解决方案.

我发生的唯一事情就是循环遍历十进制整数1-32768并将它们转换为二进制,并使用二进制表示作为过滤器来选择适当的数字.

有谁知道更好的方法?使用map(),也许?

python combinations

374
推荐指数
17
解决办法
56万
查看次数

列表列表的所有组合

我基本上正在寻找一个python版本的组合List<List<int>>

给定一个列表列表,我需要一个新列表,它列出了列表之间所有可能的项目组合.

[[1,2,3],[4,5,6],[7,8,9,10]] -> [[1,4,7],[1,4,8],...,[3,6,10]]
Run Code Online (Sandbox Code Playgroud)

列表的数量是未知的,所以我需要一些适用于所有情况的东西.优点加分!

python combinations

210
推荐指数
6
解决办法
10万
查看次数

两个名单之间的组合?

已经有一段时间了,我无法绕过我想要制作的算法.基本上,我有两个列表,并希望获得两个列表的所有组合.

我可能不会解释它是正确的,所以这是一个例子.

name = 'a', 'b'
number = 1, 2
Run Code Online (Sandbox Code Playgroud)

在这种情况下的输出将是:

1.  A1 B2
2.  B1 A2
Run Code Online (Sandbox Code Playgroud)

棘手的部分是"name"变量中的项目可能比"number"变量中的项目更多(数字将始终等于或小于name变量).

我很困惑如何进行所有组合(嵌套for循环?),如果名称中的项目多于它们在数字列表中的项目,则更加混淆逻辑以移动名称变量中的项目.

我不是最好的程序员但是如果有人可以帮助我澄清逻辑/算法来实现这一点,我想我可以试一试.所以我刚刚陷入嵌套for循环.

更新:

这是3个变量和2个数字的输出:

name = 'a', 'b', 'c'
number = 1, 2
Run Code Online (Sandbox Code Playgroud)

输出:

1.  A1 B2
2.  B1 A2
3.  A1 C2
4.  C1 A2
5.  B1 C2
6.  C1 B2
Run Code Online (Sandbox Code Playgroud)

python algorithm combinations list

158
推荐指数
11
解决办法
14万
查看次数

使用numpy构建两个数组的所有组合的数组

我试图在6参数函数的参数空间上运行以研究它的数值行为,然后再尝试做任何复杂的事情,所以我正在寻找一种有效的方法来做到这一点.

给定6-dim numpy数组作为输入,我的函数采用浮点值.我最初尝试做的是:

首先,我创建了一个函数,它接受2个数组并生成一个数组,其中包含来自两个数组的所有值组合

from numpy import *
def comb(a,b):
    c = []
    for i in a:
        for j in b:
            c.append(r_[i,j])
    return c
Run Code Online (Sandbox Code Playgroud)

然后我习惯reduce()将它应用于相同数组的m个副本:

def combs(a,m):
    return reduce(comb,[a]*m)
Run Code Online (Sandbox Code Playgroud)

然后我评估我的功能如下:

values = combs(np.arange(0,1,0.1),6)
for val in values:
    print F(val)
Run Code Online (Sandbox Code Playgroud)

这有效,但它太慢了.我知道参数的空间很大,但这不应该太慢.在这个例子中我只抽取了10 6(一百万)个点,并且创建数组花了超过15秒values.

你知道用numpy做这个更有效的方法吗?

F如果有必要,我可以修改函数获取它的参数的方式.

python arrays numpy multidimensional-array

132
推荐指数
9
解决办法
10万
查看次数

Python中的成对交叉产品

如何从Python中的任意长列表列表中获取交叉产品列表?

a = [1, 2, 3]
b = [4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

crossproduct(a,b)应该屈服[[1, 4], [1, 5], [1, 6], ...].

python list

99
推荐指数
3
解决办法
6万
查看次数

对列表中的每对元素进行操作

使用Python,我想比较列表中的每个可能的对.

假设我有

my_list = [1,2,3,4]
Run Code Online (Sandbox Code Playgroud)

我想对列表中的2个元素的每个组合进行操作(让我们称之为foo).

最终结果应该是相同的

foo(1,1)
foo(1,2)
...
foo(4,3)
foo(4,4)
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是手动迭代两次列表,但这似乎不是pythonic.

python

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

在python中重复生成排列

我知道itertools,但它似乎只能生成排列而不重复.

例如,我想为2个骰子生成所有可能的骰子.所以我需要[1,2,3,4,5,6]的大小为2的所有排列,包括重复:(1,1),(1,2),(2,1)......等等

如果可能的话,我不想从头开始实现这一点

python permutation combinatorics

69
推荐指数
3
解决办法
4万
查看次数

迭代Python中多个列表中的所有值组合

给定多个可能变化长度的列表,我想迭代所有值的组合,每个列表中的一个项目.例如:

first = [1, 5, 8]
second = [0.5, 4]
Run Code Online (Sandbox Code Playgroud)

然后我希望输出为:

combined = [(1, 0.5), (1, 4), (5, 0.5), (5, 4), (8, 0.5), (8, 4)]
Run Code Online (Sandbox Code Playgroud)

我想迭代组合列表.我怎么做到这一点?

python iteration

41
推荐指数
2
解决办法
4万
查看次数

如何将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万
查看次数