Python reverse list 局部反转 逆向切片 多维 slice list拼接

本文详细解析了 Python 中列表切片、反转及字符串处理的高级技巧,包括 range() 函数的理解、reverse 和 reversed 的区别、列表拼接的不同方式等,适合 Python 初学者和进阶者阅读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要牢记几点:

  1. range(a,b,c)和 a : b : c a:b:c a:b:c的含义是一样的,但是list的下标只能用 a : b : c a:b:c a:b:c,其中c是步长
  2. reverse和reversed的区别是有没有返回值,类似于sort和sorted的区别
  3. 对于string类型来说,没有reverse()方法,只有reversed(),reversed()的返回值是iterater object,说白了就是一个迭代类型,因此str(reversed(‘abc’))仍然是reversed object,想要拿反转后的结果得用’’.join(reversed(‘abc’))
  4. 如果逆着slice, l e n ( a r r ) − 1 : − 1 : − 1 len(arr)-1:-1:-1 len(arr)1:1:1要返回空,因为-1在slice里被认为是python最后一个元素,所以slice只能把一个局部不包含下标为0的给reverse掉,整体reverse要用arr.reverse(),或者reversed(arr),再或者arr[::-1],再或者arr[-1::-1],但就是中间写多少都不对!
  5. 所以,不管reverse哪个局部,最好的方法是 a [ a : b : c ] = r e v e r s e d ( a [ a : b : c ] ) a[a:b:c] = reversed(a[a:b:c]) a[a:b:c]=reversed(a[a:b:c])
  6. Python list[list]并不支持多维slice,这不是numpy,但是可以支持选出某一行再对列slice, a r r [ a : b ] [ c : d ] arr[a:b][c:d] arr[a:b][c:d]相当于按行 [ a , b ) [a,b) [a,b)后再按行 [ c , d ) [c,d) [c,d),可以看下面那个例子
  7. list拼接简单而言有两种思路:
    a. 原list上append/原list上extend/原list上切片
    b. 使用list + ,返回一个新的list

下面看几个例子:

a = [1,2,3]
print(a[0:3]) #[1, 2, 3]
print(a[2:-1:-1]) #[]
print(a[::-1]) #[3, 2, 1]
print(a[-1::-1]) #[3, 2, 1]
print(a[-1:-1:-1]) #[]
print(a[-1:0:-1]) #[3, 2]

a[0:2].reverse()
print(a) #[1,2,3]
print(list(reversed(a[0:2]))) #[2,1]

a[0:2] = reversed(a[0:2])
print(a) #[2,1,3]

print(a[:-1]) #[2,1]
print(a[-1:]) #[3]
print(a[-1:-1]) #[]

astr = 'abc'
#reversed iterater object
print(reversed(astr)) #<reversed object at 0x000002752B36E518>
print(''.join(reversed(astr))) #cba
print(astr[::-1]) #cba
print(astr[-1::-1]) #cba
print(astr[-1:-1:-1]) #''
print(astr) #abc

arr=[[1,2,3],[4,5,6],[7,8,9]]
print(arr[2:4][2:4]) #[]
print(arr[1:4][:]) #[[4, 5, 6], [7, 8, 9]]
print(arr[:][1:4]) #[[4, 5, 6], [7, 8, 9]]
print(arr[1][1:4]) #[5, 6]
arr1 = [arr[1][1:4]]
arr1.extend([arr[2][1:4]])
print(arr1) # [[5, 6], [8, 9]]

#直接在原来list基础上搞
lst = [0,1,2]
print(lst.extend([3])) #None
lst[4:7] = [6]
print(lst)
#直接新new一个list
print([0,1,2]+[3,4])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值