在 python 中创建列表的特定排列
create specific permutation of a list in python
我正在尝试编写一个函数来输入一个列表(具有预定长度)并根据我选择的重新排序输出该列表的排列。
例如,假设我有列表
[1,'a',12,'b','poppy']
我有排列
(3,4,5,2,1)
那么函数输出将是一个列表,第三个元素在前,第四个元素在后,依此类推
[12,'b','poppy','a',1]
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]
列表的第一个元素是0
:
l = [1,'a',12,'b','poppy']
p = (2,3,4,1,0)
result = []
for i in p:
result.append(l[i])
使用operator.itemgetter
。由于您的排列是针对基于 1 的列表,因此您需要先在列表的前面添加一个虚拟元素。 (您可以使用多种技术从 p
的每个元素中减去一个,但是在将列表传递给 itemgetter
返回的函数之前仅 "shift" 更简单。)
>>> 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)
我正在尝试编写一个函数来输入一个列表(具有预定长度)并根据我选择的重新排序输出该列表的排列。
例如,假设我有列表
[1,'a',12,'b','poppy']
我有排列
(3,4,5,2,1)
那么函数输出将是一个列表,第三个元素在前,第四个元素在后,依此类推
[12,'b','poppy','a',1]
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]
列表的第一个元素是0
:
l = [1,'a',12,'b','poppy']
p = (2,3,4,1,0)
result = []
for i in p:
result.append(l[i])
使用operator.itemgetter
。由于您的排列是针对基于 1 的列表,因此您需要先在列表的前面添加一个虚拟元素。 (您可以使用多种技术从 p
的每个元素中减去一个,但是在将列表传递给 itemgetter
返回的函数之前仅 "shift" 更简单。)
>>> 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)