第一章:数据结构和算法
任何序列(可迭代的对象)都可以通过一个简单的赋值操作来分解为单独的变量,唯一的要求是变量的总数和结构要与序列相吻合。(比如对于存储二维坐标等的二维数组,可以通过for x,y in range()操作分别取其x,y坐标)
例:data=[‘ACM’,50,50.11,(2012,12,12)]
name,shares,price,date=data
print (name)
当可迭代的对象长度较长,而我们只需要取其中的N个元素时,可以使用“*表达式”解决此问题,如:
def drop_first_last(grades):
first,*middle,last=grades
return avg(middle)
其中以*开头的参数表示可以接收任意数量的位置参数的函数(元组形式),以**开头的参数表示可以 接收任意数量的关键字参数的函数(字典形式)。
collections.deque的使用:指定maxlen时即为创建了一个固定长度的队列,不指定maxlen得到的为一个无界限的队列。
lambda函数是一种可以在代码中内联定义的小型匿名函数,通常用于定义一个短小精悍的函数来实现某一特定的任务。语法形式如下:
lambda 参数列表: 表达式key=lambda s:s[‘price’]
优先级队列的实现:
使用到了堆(字典操作:item,key,value)
heapq.heappush(heap,item)
表示将item加入列表heap中,其中item一般为一个元组,根据元组中的第一个元素进行排序(从小到大的排序,即先输出小的值)。元组中可为(prioroty,index,item)形式,此时当prioroty值相等时,会比较索引值,即index。
(leetcode347.前k个高频元素)
collections模块中的defaultdict类可以实现一个键映射到多个值上,OrderedDict类可以实现字典做迭代时,按照初始化添加的顺序进行(内部维护了一个双向链表)
反转字典的键值zip(prices.values(),prices.keys())
因为字典上执行数据操作只能处理键,而不是值,所以进行键值的反转可以简化很多问题。
字典中的键也支持常见的集合操作,如求并集、交集和差集等。
例:c={key:a[key] for key in a.keys()-{‘z’,’w’}}
可哈希的定义:不可变数据类型都是可哈希的,包括整数、浮点数、布尔值、字符串、元组等。可变数据类型都是不可哈希的,因为它们的值在创建后可以修改,这样会导致它们的哈希值变化。
对切片命名:slice函数,a=slice(2,4)
查找序列中元素出现的次数,collections中的Counter类,同时Counter可以执行数学运算操作
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)