一、切片
基本语法:对象名称【开始索引: 结束索引 :步长】
注意:
* 这三个点都可以省略,开始省略为0,结束省略为全部,步长省略为1。
* 它们是个左闭右开【开始:结束)不包括结束这个值。
* 索引可以为正负:正数:从左边开始;负数:从右边开始。
1、访问:使用切片完成访问功能。
x = [2,3,6,7,8,34,4,32,25]
# 切取单个元素
print(x[1]) # 3
print(x[-2]) # 32
# 窃取整个对象
print(x[:])
print(x[::]) # 前两种效果一样
print(x[::-1]) # 逆序
# 多层切片
print(x[3:6][0:2][1])
# [7,8,34,4] --> [7,8] --> [8]
2、插入
# 在尾部增加一个或者多个元素
x = [9,8,7,666]
x[3:] = [35,25] # [9,8,7,35,25]
x[4:] = [35,25] # [9,8,7,666,35,25]
print(x)
# 在首部插入元素
x1 = [9,7,8]
x1[:0] = [666,999]
print(x1) # [666,999,9,7,8]
# 在中间指定位置插入元素
x2 = [9,7,8]
x2[1:1] = [666,999] # 在0和1之间插入
print(x2) # [9,666,999,7,8]
3、修改
# 长度不一致
x = [0,1,2,3,4,5,6]
x[3:6] = [77,88,99,11,22,33]
print(x)
x = [0,1,2,3,4,5,6]
print(x)
x[3:6] = [999]
# 不相邻的位置替换
x = [1,2,3,4,5,6,7,8,9]
x[::2] = [0,0,0,0,0] # 这时候0就要对应存在的数量,否则会报错。
# x[::2] = [0]*5
4、删除
# 剔除操作
x = [9,8,7,666,1,5,6,70]
x[:5] = []
print(x)
# [5, 6, 70]
# 连续删除
x1 = [1,2,3,4,5,6]
del x1[:4]
print(x1)
# [5, 6]
# 隔位删除
x3 = [9,8,7,666,1,5,6,70]
print(x3)
print(x3[::3])
del x3[::3]
print(x3)
# [9, 8, 7, 666, 1, 5, 6, 70]
# [9, 666, 6]
# [8, 7, 1, 5, 70]
二、map/reduce
# map函数
def lifang(x):
return x**3
a = [7,8,9]
y = map(lifang,a)
print(list(y)) # 需要用list将map对象处理成列表
# [343, 512, 729]
# reduce
from functools import reduce
def mini(x,y):
z = x if x > y else y #如果x大于y,则输出下,否则输出y
return z
a = [34,5,6,4,5,67,67,34,57,345,7,54,7]
y = reduce(mini,a)
print(y)
# 345
三、闭包
# 闭包
'''普通例子'''
def balance(kg,dj):
return (kg-0.1)*dj
banana = balance(10.1,5)
print(banana)
banana2 = balance(10.1,5)
'''闭包例子:
1)函数里面又有函数
2)内函数一定用到了外函数的变量
3)外函数的返回值是内函数
'''
def dianzicheng(danjia):
def jisuan(zhongliang):
return (maozhong-0.1)*danjia
return jisuan
apple = dianzicheng(3)
'''
等价于def jisuan(maozhong):
return (maozhong-0.1)*3
'''
print(apple(10.1))