Skip to main content
 首页 » 编程设计

Python 列表 : exchange every n-th value with the (n+1)th

2025年05月04日11qq78292959

最好的方法是什么:

>>> replace2([1, 2, 3, 4, 5, 6]) 
[2, 1, 4, 3, 6, 5] 

请您参考如下方法:

def replace2inplace(lst): 
    lst[1::2], lst[::2] = lst[::2], lst[1::2] 

这使用切片分配和切片步长来交换列表中的每一对,就地:

>>> somelst = [1, 2, 3, 4, 5, 6] 
>>> replace2inplace(somelst) 
>>> somelst 
[2, 1, 4, 3, 6, 5] 

否则你可以使用一些 itertools 技巧:

from itertools import izip, chain 
 
def replace2copy(lst): 
    lst1, lst2 = tee(iter(lst), 2) 
    return list(chain.from_iterable(izip(lst[1::2], lst[::2]))) 

给出:

>>> replace2([1, 2, 3, 4, 5, 6]) 
[2, 1, 4, 3, 6, 5] 

list()调用可选;如果你只需要遍历生成器的结果就足够了:

from itertools import izip, chain, islice, tee 
 
def replace2gen(lst): 
    lst1, lst2 = tee(iter(lst)) 
    return chain.from_iterable(izip(islice(lst1, 1, None, 2), islice(lst2, None, None, 2))) 
 
for i in replace2gen([1, 2, 3, 4, 5, 6]): 
    print i 

其中 replace2gen() 也可以采用任意迭代器。