需要牢记几点:
- range(a,b,c)和 a : b : c a:b:c a:b:c的含义是一样的,但是list的下标只能用 a : b : c a:b:c a:b:c,其中c是步长
- reverse和reversed的区别是有没有返回值,类似于sort和sorted的区别
- 对于string类型来说,没有reverse()方法,只有reversed(),reversed()的返回值是iterater object,说白了就是一个迭代类型,因此str(reversed(‘abc’))仍然是reversed object,想要拿反转后的结果得用’’.join(reversed(‘abc’))
- 如果逆着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],但就是中间写多少都不对!
- 所以,不管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])
- 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),可以看下面那个例子
- 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])