例如,我有:
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
答案 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,因此足以获得所需的订单。然后,列表推导从索引/值对的排序列表中提取原始值。
(对于给定的问题,连接两个切片肯定更简单,虽然可能更昂贵。基准测试将确定两种方法中的哪一种更快/更有效。)