#bisect用来处理已排序的序列,默认是insort_right和bisect_right
# insort_right\insort\bisect_right\bisect\insort_left\bisect_left
# bisect采用二分查找算法,来维持可排序的序列,包括插入和查找
# insort_left\right:若查找数据已存在,则插入到该数据之前(后)
# bisect_left\right:待查找数据的左(右)侧下标
import bisect
int_list = [] # 可以用任意可修改的序列
# 插入即可排序
bisect.insort(int_list,3)
bisect.insort(int_list,2)
bisect.insort(int_list,5)
bisect.insort(int_list,1)
print(int_list)
print(bisect.bisect(int_list,3))
# bisect里的bisect默认是bisect_right
什么时候不该使用数组(引出array和deque)
python中的array是C语言的数组,
list中的方法:append\clear\copy\count\extend\index\insert\pop\remove\reverse\sort
array中的方法:append\buffer_info\byteswap\count\extend\frombytes\fromfile\fromlist\fromstring\fromunicode\index\insert\
array只能存放指定的数据类型
b(signed char)\B(unsigned char)\u(PY_UNICODE)\h(signed short)\H(unsigned short)\i(signed int)\I(unsigned int)\等等
my_array =array.array("i")
my_array.append("abc") # 报错,只存int类型数据
列表推导式(也叫生成式)、生成器表达式、字典推导式
列表生成式:
通过一行代码,生成列表,列表生成式性能高于列表操作(但如果逻辑过于复杂就可以不用,代码可读性很重要)
1、提取出1-20之间的奇数:先循环再条件判断
odd_list = [i for i in range(21) if i%2==1]
# 2、逻辑复杂的情况:可替代map\reduce\等函数
def handle_item(item):
return item*item
odd_list = [handle_item(i) for i in range(21) if i%2==1]
生成器表达式:
列表生成式的变形,把[]变为()即可,最后生成generator
odd_gen = (i for i in range(21) if i%2==1)
字典推导式:
应用(可将字典的键和值对调)
my_dict = {"bobby1":22,"bobby2":23,"bobby3":5}
reversed_dict = {value:key for key,value in my_dict.items()}
集合推导式:
应用(将字典的key全放到集合里),还是大括号
my_set = {key for key,value in my_dict.items()}
还有一个方式,可以将字典的key放到集合里
my_set = set(my_dict.keys())
set是可以接收iterable对象,然后转化为set的。但使用集合推导式可以另外自己加逻辑