首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何执行列表的成对交换?

如何执行列表的成对交换?
EN

Stack Overflow用户
提问于 2015-05-07 17:50:04
回答 8查看 4.8K关注 0票数 3

我想用python写一小段代码来交换列表中的元素这个程序将接受一个列表,并将返回一个交换每对相邻元素的位置的列表:位置0和1,位置2和3,依此类推。如果列表中有奇数个元素,那么最后一个位置的元素会保持“原地不动”。

代码语言:javascript
复制
Before: [1,2,3,4,5]
After: [2,1,4,3,5]

这看起来像是非蟒蛇。Python的方法是什么?

EN

回答 8

Stack Overflow用户

发布于 2015-05-09 04:26:56

最具蟒蛇风格的方式:

代码语言:javascript
复制
def swappairwise(a):
  l = len(a)&~1
  a[1:l:2],a[:l:2] = a[:l:2],a[1:l:2]
票数 4
EN

Stack Overflow用户

发布于 2018-01-26 15:48:15

这里有一个很好的例子,如果你总是保证有even号码的话:

代码语言:javascript
复制
 nums = [1,2,3,4,5,6]
 print([nums[i^1] for i in range(len(nums))])
 >>[2, 1, 4, 3, 6, 5] 

说明:

代码语言:javascript
复制
print (0^1)    #1
print (1^1)    #0
print (2^1)    #3
print (3^1)    #2
print (4^1)    #5
print (5^1)    #4

作为刷新程序,XOR具有以下效果:

代码语言:javascript
复制
A   B | Output
---------------
0   0     0
0   1     1
1   0     1
1   1     0

和官方描述:如果y中的位是0,那么输出的每一位都与x中的相应位相同,如果y中的位是1,那么它就是x中的位的补码。

票数 3
EN

Stack Overflow用户

发布于 2015-05-09 18:51:28

基于@Arpegius上面的答案,这里是一个可读性更好的解决方案。使用相同的方法。

代码语言:javascript
复制
def swap_list_pairwise(lis):
    """Pairwise swap of all elements in a list.

    If the number of elements is odd, the leftover element
    stays at its place.
    """
    length = len(lis)  
    # Stop at second last if length is odd, otherwise use full list. 
    end = length - 1 if length % 2 else length
    lis[1:end:2], lis[:end:2] = lis[:end:2], lis[1:end:2]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30097512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档