有没有办法将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)
我知道可以定义myfun为myfun((a, b, c)),但当然可能有遗留代码.谢谢
我有一个包含15个数字的列表,我需要编写一些代码来生成这些数字的所有32,768种组合.
我发现了一些代码(通过谷歌搜索)显然正在寻找我正在寻找的东西,但我发现代码相当不透明并且对使用它很谨慎.另外我觉得必须有一个更优雅的解决方案.
我发生的唯一事情就是循环遍历十进制整数1-32768并将它们转换为二进制,并使用二进制表示作为过滤器来选择适当的数字.
有谁知道更好的方法?使用map(),也许?
我基本上正在寻找一个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)
列表的数量是未知的,所以我需要一些适用于所有情况的东西.优点加分!
已经有一段时间了,我无法绕过我想要制作的算法.基本上,我有两个列表,并希望获得两个列表的所有组合.
我可能不会解释它是正确的,所以这是一个例子.
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) 我试图在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中的任意长列表列表中获取交叉产品对列表?
a = [1, 2, 3]
b = [4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
crossproduct(a,b)应该屈服[[1, 4], [1, 5], [1, 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.
我知道itertools,但它似乎只能生成排列而不重复.
例如,我想为2个骰子生成所有可能的骰子.所以我需要[1,2,3,4,5,6]的大小为2的所有排列,包括重复:(1,1),(1,2),(2,1)......等等
如果可能的话,我不想从头开始实现这一点
给定多个可能变化长度的列表,我想迭代所有值的组合,每个列表中的一个项目.例如:
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)
我想迭代组合列表.我怎么做到这一点?
我有一个数组列表,我想获得数组中元素的笛卡尔积.
我将用一个例子来说明这个更具体......
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 ×10
combinations ×3
list ×2
algorithm ×1
arrays ×1
iteration ×1
numpy ×1
permutation ×1
tuples ×1