记录一下python的切片操作~~
a = [1,2,3,4,5,6,7,8]
#--------基础操作----------
print(a[:]) #输出全部序列 [1, 2, 3, 4, 5, 6, 7, 8]
print(a[:4]) #输出第0-3号,不包括4 [1, 2, 3, 4]
print(a[:-1])#不包括最后一个 [1, 2, 3, 4, 5, 6, 7]
print(a[4:])#从第4号往后 [5, 6, 7, 8]
print(a[-4:])#从倒数第四个往后 [5, 6, 7, 8]
print(a[3:-3]) #[4, 5]
#---------两个特殊用法-----------
print(a[-0:]) #这个要记住,得到原列表的一份拷贝 [1, 2, 3, 4, 5, 6, 7, 8]
print(a[:]) #得到的也是源列表的一份拷贝
#---------高级操作-----------
a[start:end:stride] #可以实现步进式切割,但是在单次切片操作内,不要同时指定start、end和stride,否则会使得代码可读性变差,如果一定要配合使用的话,可以先做步进式切片,然后在切割结果中做二次切割。
print(a[::2]) #输出偶数索引的值 [1, 3, 5, 7]
print(a[1::2]) #输出奇数索引的值 [2, 4, 6, 8]
print(a[::-1]) #采用-1做步进值,可以输出a的反转序列 [8, 7, 6, 5, 4, 3, 2, 1]
print(a[::-2]) #从尾部开始,每隔两个元素取一个 [8, 6, 4, 2]
python的多重循环写法(很神奇啊有木有):
a = [[1,2,3],[4,5,6],[7,8,9]]
flat =[x for row in a for x in row]
print (flat) #[1, 2, 3, 4, 5, 6, 7, 8, 9]
squared = [[x**2 for x in row] for row in a]
print(squared) #[[1, 4, 9], [16, 25, 36], [49, 64, 81]]