我正在尝试编写一个输入列表(预定长度)的函数,并根据我的重新排序选择输出该列表的排列。
例如,假设我有列表
[1,'a',12,'b','poppy']
我有排列
(3,4,5,2,1)
然后函数输出将是第一个元素,第四个元素第二个等等的列表
[12,'b','poppy','a',1]
答案 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])