在python中创建列表的特定排列

时间:2015-06-16 20:51:19

标签: python algorithm permutation

我正在尝试编写一个输入列表(预定长度)的函数,并根据我的重新排序选择输出该列表的排列。

例如,假设我有列表

    [1,'a',12,'b','poppy']

我有排列

    (3,4,5,2,1)

然后函数输出将是第一个元素,第四个元素第二个等等的列表

    [12,'b','poppy','a',1]

3 个答案:

答案 0 :(得分:4)

l = [1,'a',12,'b','poppy']

def p(l,t):
    return [l[i-1] for i in t]

print(p(l,(3,4,5,2,1)))
[12, 'b', 'poppy', 'a', 1]

索引是基于0的,所以如果你真的想要使用5个元素列表的索引,它将是(2,3,4,1,0)[l[i] for i in t]

答案 1 :(得分:2)

使用operator.itemgetter。由于您的排列是基于1的列表,因此您需要首先在列表的前面添加一个虚拟元素。 (您可以使用各种技术从p的每个元素中减去一个,但在将列表传递给itemgetter返回的函数之前,只需“移动”列表就更简单了。)

>>> from operator import itemgetter
>>> p = (3,4,5,2,1)
>>> lst = [1,'a',12,'b','poppy']
>>> itemgetter(*p)([None] + lst)
(12, 'b', 'poppy', 'a', 1)

答案 2 :(得分:0)

列表的第一个元素是0

l = [1,'a',12,'b','poppy']
p = (2,3,4,1,0)
result = []
for i in p:
    result.append(l[i])