如果我有列表,[a,b,c,d,e]如何以任意方式重新排序商品[d,c,a,b,e]?
编辑:我不想洗牌。我想以预定义的方式重新排序。(例如,我知道旧列表中的第3个元素应成为新列表中的第一个元素)
如果我有列表,[a,b,c,d,e]如何以任意方式重新排序商品[d,c,a,b,e]?
编辑:我不想洗牌。我想以预定义的方式重新排序。(例如,我知道旧列表中的第3个元素应成为新列表中的第一个元素)
Answers:
>>> 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']
编辑:嗯。AJ速度更快... 如何在python中重新排序列表?
您可以提供自己的排序功能list.sort():
sort()方法采用可选参数来控制比较。
cmp指定了两个参数(列表项)的自定义比较函数,该函数应返回负数,零数或正数,具体取决于第一个参数是否小于,等于或大于第二个参数:
cmp=lambda x,y: cmp(x.lower(), y.lower())。默认值为None。key指定一个参数的功能,该参数用于从每个列表元素中提取比较键:
key=str.lower。默认值为None。reverse是一个布尔值。如果设置为True,则对列表元素进行排序,就好像每个比较都被反转一样。
通常,键和反向转换过程比指定等效的cmp函数要快得多。这是因为对于每个列表元素,cmp被多次调用,而按键和反向触摸每个元素仅一次。
据我对您的问题的了解,您似乎想应用在上指定的排列list。这可以通过指定另一个list(让我们称之为p)来保存list应出现在置换中的原始元素的索引来完成list。然后p,您可以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']。
实际上list,这会创建一个新的,但可以对其进行微不足道的修改以置换原始的“就地”。