列表python的排列

时间:2013-11-17 20:11:07

标签: python permutation itertools

我需要定义一个函数apply(L,P),其中L是一个列表,P是一个排列,它应该返回列表L o 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'

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:1)

这听起来像是一个列表理解最容易实现的任务:

>>> 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']

答案 1 :(得分:0)

这是我的版本:

def apply(L, P):
    newL = [None]*len(L)
    for i,index in enumerate(P):
        newL[i] = L[index]
    return newL

这可以很容易地在python的一行中完成,但我想说明这里发生了什么。

在返回之前创建整个列表。 return表示该函数应退出并返回指定的值。在您的情况下是'ah',因为它是您循环的列表中的第一个元素。

如果你想学习python,请查看svk的pythonic列表理解。