Python 列表的置换
我需要定义一个函数apply(L,p),其中L是一个列表,p是一个排列,它应该返回列表lop。假设Python 列表的置换,python,permutation,itertools,Python,Permutation,Itertools,我需要定义一个函数apply(L,p),其中L是一个列表,p是一个排列,它应该返回列表lop。假设len(L)=len(p) 到目前为止我得到的是 import itertools def apply(L, P): for perm in L: return perm 输入的一个例子是apply(['ah','boo','cc','du','eh'],[1,4,3,2,0]) 但是它唯一的输出是'ah' 任何帮助都会很好。以下是我的版本: def apply(L, P
len(L)=len(p)
到目前为止我得到的是
import itertools
def apply(L, P):
for perm in L:
return perm
输入的一个例子是apply(['ah','boo','cc','du','eh'],[1,4,3,2,0])
但是它唯一的输出是'ah'
任何帮助都会很好。以下是我的版本:
def apply(L, P):
newL = [None]*len(L)
for i,index in enumerate(P):
newL[i] = L[index]
return newL
在python中,这可以很容易地在一行代码中完成,但我想说明这里发生了什么
整个列表在返回之前创建<代码>返回表示函数应退出并返回指定值。在您的例子中,这是'ah'
,因为它是您循环使用的列表中的第一个元素
如果您想学习python,请查看svk非常类似python的列表理解。这听起来像是一项最容易通过列表理解完成的任务:
>>> def apply(L, P):
... return [ L[i] for i in P ]
...
>>> apply(['ah', 'boo', 'cc', 'du', 'eh'], [1, 4, 3, 2, 0])
['boo', 'eh', 'du', 'cc', 'ah']
实际上,您并没有在任何地方使用P。
return
将立即结束函数并返回值作为唯一的返回值。所以你基本上停止了你的循环。您可能希望将其改为生成器,并使用yield
@poke。我很确定她/他希望返回整个列表。但这也让我想到了产量/发电机:p。如果有人感兴趣,那就好好读一读。