python数组反转的几种方式

本文介绍了Python中反转数组的四种方法:内建函数`reversed`、数组`reverse`方法、切片、原地交换和倒序遍历,以及利用栈的LIFO特性。每种方法都有其适用场景和效率特点。
摘要由CSDN通过智能技术生成

python数组的反转可以有好几种方式,基于python语言的强大表现能力和丰富的特性,总结以下几种。

首先给定一个基本数组: d = [1, 2, 3, 4, 5, 6]

1. reversed函数

reversed 是python的内建函数,会将原数组进行反转(但不影响原数组本身的序列),生成一个新的迭代器,然后你再将其具化为数组。

In [5]: new_d = reversed(d)

In [6]: list(new_d)
Out[6]: [6, 5, 4, 3, 2, 1]

2. reverse函数

该函数是数组本身支持的一个功能,它对原数组本身进行修改反转,执行完该操作后,原数组的顺序发生逆变。

In [13]: d.reverse()

In [14]: d
Out[14]: [6, 5, 4, 3, 2, 1]

3. 切片

通过切片的方式去生成一个新的数组,原数组本身保持不变。

In [20]: dd = d[::-1]

In [21]: dd
Out[21]: [6, 5, 4, 3, 2, 1]

4. 自己实现

这种方式在于有些算法要求需要自己实现,不借助语言本身提供的便捷函数。

4.1 原地交换

这种方式在于基于数组本身修改,利用交换原则,原地交换数组各元素,空间复杂度O(1)。

def reverse(d: list):
     d_len = len(d)
     half_d = d_len // 2

     for i in range(half_d):
         d[i], d[d_len - i - 1] = d[d_len - i - 1], d[i]

In [27]: reverse(d)

In [28]: d
Out[28]: [6, 5, 4, 3, 2, 1]

4.2 倒序遍历

借助新的数组,开辟了新的内存空间,这个在空间复杂度上不满足O(1)。

def reverse_1(d: list):
	d_len = len(d)
	result = []
	
	for i in range(d_len - 1, -1, -1):
    	result.append(d[i])
	
	return result

In [34]: res = reverse_1(d)

In [35]: res
Out[35]: [6, 5, 4, 3, 2, 1]

4.3 利用栈的LIFO

其实python的数组也是LIFO的数据类型,这里面压栈的步骤省略,出栈满足我们的要求 - 即从数组尾端出栈,即可实现倒序弹出。

def stack_pop(d: list):
	while d:
		yield d.pop()

In [37]: d = [1, 2, 3, 4, 5, 6]

In [38]: list(stack_pop(d))
Out[38]: [6, 5, 4, 3, 2, 1]

以上就是python的几种数组反转的方式,希望对需要的人有帮助。

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值