Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列表的置换_Python_Permutation_Itertools - Fatal编程技术网

Python 列表的置换

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

我需要定义一个函数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):
    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。如果有人感兴趣,那就好好读一读。