Python反转序列(列表、元组、字符串)的几种方法

使用reversed(seq)内置函数

reversed(seq)是将序列(seq)反转,返回一个迭代器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# reverse list
>>> l = ['A', 'B', 'C']
>>> x = list(reversed(l))
>>> x
['C', 'B', 'A']
# reverse tuple
>>> t = ('A', 'B', 'C')
>>> y = tuple(reversed(t))
>>> y
('C', 'B', 'A')
# reverse str
>>> s = 'ABC'
>>> z = ''.join(reversed(s))
>>> z
'CBA'
>>>

注意一点,reversed(seq)函数并没有改变seq序列本身,如需改动seq序列本身,将结果赋值给seq即可。以列表为例:

1
2
3
4
5
# reverse list in place
>>> l = ['A', 'B', 'C']
>>> l = list(reversed(l))
>>> l
['C', 'B', 'A']

使用切片操作[::-1]

切片用法[<start>:<end>:<step>],其中start默认值是0,end默认值是len(seq),step默认值是1。此处省略了start和end,步长为-1代表反向切片(从右向左每次前进1步)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# reverse list
>>> l = ['A', 'B', 'C']
>>> x = l[::-1]
>>> x
['C', 'B', 'A']
# reverse tuple
>>> t = ('A', 'B', 'C')
>>> y = t[::-1]
>>> y
('C', 'B', 'A')
# reverse str
>>> s = 'ABC'
>>> z = s[::-1]
>>> z
'CBA'
>>>

由于切片操作返回的是与序列类型相同的新对象,也不会改变原始的序列,如需改变,将结果赋值原始序列。以字符串为例:

1
2
3
4
5
6
# reverse str in place
>>> s = 'ABC'
>>> s = s[::-1]
>>> s
'CBA'
>>>

列表的原地反转reverse()方法

由于列表是可变类型,其reverse()方法可以原地反转列表中元素,无返回值(通常来讲原地改变对象的方法都没有返回值或是说返回值都是None),元组和字符串都是不可变类型,因此都没有reverse()方法。

1
2
3
4
5
6
# reverse list in place
>>> l = ['A', 'B', 'C']
>>> l.reverse()
>>> l
['C', 'B', 'A']
>>>

大师兄 wechat
欢迎关注我的微信公众号:Python大师兄