在Python中,如何按照另一个列表列表中指定的顺序重新排列列表中的项目?

时间:2015-07-12 22:40:07

标签: python

排列在以下列表列表中指定:

 lines = [
    [0, 1, 2, 3, 4, 5, 6, 7, 8],
    [8, 1, 2, 3, 4, 5, 6, 7, 0],
    [4, 0, 8, 2, 6, 3, 7, 1, 5]]

此列表应按照'行中指定的顺序重新排列':

data = [a,b,c,d,e,f,g,h,i]

示例置换(遵循序列8 1 2 3 4 5 6 7 0),

random = [i,b,c,d,e,f,g,h,a]

我尝试过的事情:

for entries in lines:
    for shuffle in entries:
        random.append(data[shuffle])

2 个答案:

答案 0 :(得分:1)

如果我已正确理解您,您可以通过制作一个功能itemgetter from operator module来完成,然后按照您的需要调用它:

>>> from operator import itemgetter

>>> def sorting(lists,i,data):
        return [x for x in itemgetter(*lists[i])(data)]

>>> random = sorting(lines,1,data)
['i', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'a']

或者,

您可以使用内置方法map根据您的data列表列表对您的permutation列表进行排序(此处为正确的术语),这样:

>>> def sorting(lists,i,data):
        return map(data.__getitem__,lists[i])
>>> random = sorting(lines,1,data)
['i', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'a']

答案 1 :(得分:0)

鉴于您正在使用排列,我建议您查看numpy数组。具体而言,这通过排列"重新排列"操作变得简单,索引为arr[perm]