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

在Python中,如何按照另一个列表中指定的顺序重新排列列表中的项目?,python,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] 示例置换(遵循序列8123445670) random=[i,b,c,d,e,f,g,h,a] 我所尝试的: for entries in lines:

排列在以下列表中指定:

 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]
示例置换(遵循序列8123445670)

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

我所尝试的:

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

考虑到您正在使用置换,我建议您看看numpy数组。具体地说,这种“通过排列重新排列”操作变得简单易懂,因为
arr[perm]

如果我理解正确,您可以通过创建函数来完成,然后根据需要调用它,方法如下:

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

您只需使用内置方法,根据您的
排列
列表对
数据
列表进行排序(此处使用适当的术语),方法如下:

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

请不要把“你尝试了什么”的片段作为答案。好吧,这是我的答案!如果你有答案,为什么要问问题?@Leb该网站有一个复选框,上面写着“回答你自己的问题,分享你的知识”。我想我可能会这样做。这是正确的方法吗?根本不清楚输出应该如何与输入相对应,并且您发布的答案不会产生任何与您所希望的输出类似的结果。这是有效的!然而,我正在使用ThiefMaster的建议:使用以下内容:
random=[data[shuffle]for line for entries for shuffle in entries]