Python 组合列表元素
问题: 给定一组数字Python 组合列表元素,python,Python,问题: 给定一组数字S_a={n1,n2,n3,…,na}生成以下类型的数字组合: {Sk,Sp}, where k=1...a, p=k+1,..,a 可以很容易地将此解决方案构造为循环: N = len(S) for i in range(0, N): for j in range(i+1, N): print("%d,%d" %(i,j)) 但我正在寻找一个矢量化的解决方案 另一个变体是考虑对象列表: class A: def fun
S_a={n1,n2,n3,…,na}
生成以下类型的数字组合:
{Sk,Sp}, where k=1...a, p=k+1,..,a
可以很容易地将此解决方案构造为循环:
N = len(S)
for i in range(0, N):
for j in range(i+1, N):
print("%d,%d" %(i,j))
但我正在寻找一个矢量化的解决方案
另一个变体是考虑对象列表:
class A:
def function(self, a):
pass
L = [a1, a2, a3, a4, a5 ]
#where a1,a2,an are of class A.
如何编写此循环的矢量化版本:
N = len(L)-1
for i in range(0, N):
for j in range(i+1, N):
L[i].function(L[j])
改用:
如果您想将其分离,文档将详细说明实现
将其应用于您拥有的对象列表非常简单:
for i, j in itertools.combinations(L, 2):
i.function(j)
改用:
如果您想将其分离,文档将详细说明实现
将其应用于您拥有的对象列表非常简单:
for i, j in itertools.combinations(L, 2):
i.function(j)
如果“矢量化”的意思是“内部循环发生在numpy
C代码中”:
是生成组合的最简单方法
对于在L[i]上操作的更一般情况,对于所有i!=j
,或i
,或您正在考虑的任何其他情况,有几种方法可以做到这一点您可以显式地使用广播
,或者您可以创建L的“列向量”和“行向量”并只执行该操作,或者您可以创建L的移位副本的2D数组并对其应用该操作,或者……这取决于你在做什么。如果“矢量化”的意思是“内部循环发生在numpy
C代码中”:
是生成组合的最简单方法
对于在L[i]上操作的更一般情况,对于所有i!=j
,或i
,或您正在考虑的任何其他情况,有几种方法可以做到这一点您可以显式地使用广播
,或者您可以创建L的“列向量”和“行向量”并只执行该操作,或者您可以创建L的移位副本的2D数组并对其应用该操作,或者……这取决于你在做什么。你说的“矢量化”是什么意思?通常,在Python数值编程中,“矢量化”的意思是“内部循环发生在numpy
C代码内部”。但是你没有任何numpy
,所以我怀疑你在这里的意思可能有所不同。@abarnert那是你的否决票吗?或者有人对这个问题的数学措辞感到困惑?我对这个问题都没有投票。特别是对于新用户,除非OP主动拒绝提供足够的信息使其成为有用的问题,否则我通常不会投反对票。你说的“矢量化”是什么意思?通常,在Python数值编程中,“矢量化”的意思是“内部循环发生在numpy
C代码内部”。但是你没有任何numpy
,所以我怀疑你在这里的意思可能有所不同。@abarnert那是你的否决票吗?或者有人对这个问题的数学措辞感到困惑?我对这个问题都没有投票。特别是对于较新的用户,除非OP主动拒绝提供足够的信息使其成为有用的问题,否则我通常不会投反对票。@Hoopdady为+1,但答案也实际为+1,而不是仅仅说出来。:)@abarnert在等着看这是否真的是答案。。。因为我不知道他们在问什么。:-)我认为函数调用仍然缺失:map(lambda-ai,aj:ai.function(aj),L)
@chriswesselling:我不确定是否会使用map()
调用。我更愿意让它成为一个显式循环。@MartijnPieters:我也是,但map很适合作为一个注释。@Hoopdady的+1,但答案的实际+1也不只是说出来。:)@abarnert在等着看这是否真的是答案。。。因为我不知道他们在问什么。:-)我认为函数调用仍然缺失:map(lambda-ai,aj:ai.function(aj),L)
@chriswesselling:我不确定是否会使用map()
调用。我宁愿让它成为一个显式循环。@MartijnPieters:我也是,但map很适合注释。