如何根据Python中项目索引的奇偶校验对列表进行排序

时间:2018-03-17 16:21:17

标签: python python-3.x python-2.x

例如,我有:

a = ["a","b","c","d"]

我想创建一个函数(一个键),以便:

def myfunc(a_list_of_items):
    # I have no idea what to do after this

a.sort(key=myfunc)
print(a)

输出应为:

["a","c","b","d"] #elements that had odd index -
# - stacked at one side and those with even stacked on the other

2 个答案:

答案 0 :(得分:3)

以下内容(使用Python's slice notation):

a[::2] + a[1::2]

这将导致:

['a', 'c', 'b', 'd']

在这里,sorted()功能在我看来并不合适。

答案 1 :(得分:0)

可能会使用

[x for (_, x) in sorted(enumerate(a), key=lambda i: i[0] % 2)]

首先,enumerate从原始列表中创建索引/值对列表。给定的key函数提取索引并找到余数 modulo 2;偶数索引为0,奇数索引为1,因此足以获得所需的订单。然后,列表推导从索引/值对的排序列表中提取原始值。

(对于给定的问题,连接两个切片肯定更简单,虽然可能更昂贵。基准测试将确定两种方法中的哪一种更快/更有效。)