我如何重新排列列表?

如果我有一个列表[a,b,c,d,e] ,我怎样才能像[d,c,a,b,e]这样的任意方式重新排列项目?

编辑:我不想洗牌他们。 我想以预定义的方式对它们进行重新sorting。 (例如,我知道旧列表中的第三个元素应该成为新列表中的第一个元素)

你可以这样做

 mylist=['a','b','c','d','e'] myorder=[3,2,0,1,4] mylist = [ mylist[i] for i in myorder] print mylist 
 >>> import random >>> x = [1,2,3,4,5] >>> random.shuffle(x) >>> x [5, 2, 4, 3, 1] 
 >>> a = [1, 2, 3] >>> a[0], a[2] = a[2], a[0] >>> a [3, 2, 1] 

最终订单是由一系列索引定义的吗?

 >>> items = [1, None, "chicken", int] >>> order = [3, 0, 1, 2] >>> ordered_list = [items[i] for i in order] >>> ordered_list [<type 'int'>, 1, None, 'chicken'] 

编辑:meh。 AJ是更快… 我如何重新sorting在Python中的列表?

您可以提供自己的sorting函数list.sort()

sort()方法使用可选参数来控制比较。

  • cmp指定两个参数(列表项)的自定义比较函数,根据第一个参数是小于,等于还是大于第二个参数,它应该返回负数,零或正数: cmp=lambda x,y: cmp(x.lower(), y.lower()) 。 默认值是None

  • key指定一个用于从每个列表元素提取比较键的参数的函数: key=str.lower 。 默认值是None

  • reverse是一个布尔值。 如果设置为True,那么列表元素按照每个比较被颠倒的方式sorting。

一般来说,密钥和反向转换过程比指定等效的cmp函数要快得多。 这是因为对于每个列表元素,cmp被多次调用,而按键和反向触摸每个元素只有一次。

 >>> a=["a","b","c","d","e"] >>> a[0],a[3] = a[3],a[0] >>> a ['d', 'b', 'c', 'a', 'e'] 
 newList = [oldList[3]] newList.extend(oldList[:3]) newList.extend(oldList[4:]) 

根据我对您的问题的理解,似乎您想要应用您在list指定的排列。 这是通过指定另一个list (让我们称之为p )来完成的,该list保存应该出现在置换list中的原始list元素的索引。 然后你可以用p来创build一个新的list ,只需在每个位置用索引在p中那个位置的元素来代替。

 def apply_permutation(lst, p): return [lst[x] for x in p] arr=list("abcde") new_order=[3,2,0,1,4] print apply_permutation(arr,new_order) 

这会打印['d', 'c', 'a', 'b', 'e']

这实际上创build了一个新的list ,但它可以进行简单的修改,以排列原来的“就地”。