一.推导式:1.列表推导式1.1[变量(加工后的变量) for 变量i in 可迭代数据类型]显示出“python1期” 1.1.1for 循环li=[]for i in range(1,11): li.append('python%d期'%i)print(li)#1.1.2.列表推导式li=['python%d期'%i for i in range(1,11)] #['python1期', 'python2期', 'python3期print(li)#1.1.3.生成器li=('python%d期'%i for i in range(1,11)) #<generator object <genexpr>print(li) 1.2.筛选模式:[变量(加工后的变量) for 变量i in 可迭代数据类型 if 条件]选出30以内能被3整除的数multiples = [i for i in range(30) if i % 3 ==0]print(multiples)找到嵌套列表中名字含有两个‘e’的所有名字names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'], ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]print([name for lst in names for name in lst if name.count('e') >= 2]) 1.3列表推导式和生成器:列表推导式比较直观,但占内存 2.字典推导式:将一个字典的key和value对调mcase = {'a': 10, 'b': 34}mcase_frequency = {mcase[k]: k for k in mcase}print(mcase_frequency)合并大小写对应的value值,将k统一成小写mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}mcase_frequency = {k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) for k in mcase.keys()}print(mcase_frequency) 3.集合推导式:二.内置函数:python为我们提供了68个内置函数1.数据类型类:int() bool() str() list() tuple() dic() set() print(1, 2, 3, 4, 5, sep='|')for i in range(5): print(i,end=' ') #0 1 2 3 4for i in range(5): print(i, end='| ') #0| 1| 2| 3| 4| 3.dir() 查找对象方法 for i in enumerate(l): print(i) #(0, '手机') (1, '电脑') (2, '键盘')l=['手机','电脑','键盘']for i, j in enumerate(l): print(i,j) #0 手机 1 电脑 2 键盘l=['手机','电脑','键盘']for i, j in enumerate(l,100): #设置起始值为100 print(i,j) #100 手机 101 电脑 102 键盘 16.eval() 去除字符串的引号,有返回值 li='{'name':'jerd','age':18}'print(eval(li)) #{'name': 'jerd', 'age': 18}print(exec(li)) #Nonecode='''for i in range(5): print(i) '''print(eval(code)) #SyntaxError: invalid syntax 语法错误。不支持流程print(exec(code)) #0 1 2 3 4 None max()的补充:dic={3:20,2:30,5:100}def func(x) :return xprint(max(dic,key=func)) #5dic={3:20,2:30,5:10}def func(x) : return dic[x]print(max(dic,key=func)) #2 比较的是value值 1.ord 输入字符,返回unicode对应的编码位置print(ord('中')) #20013 2.chr 输入编码位置,返回unicode对应的字符print(chr(20013)) #中 3.ascii 字符在ascii中会显示出来,不在就返回\print(ascii('a')) #'a' print(ascii('中')) #'\u4e2d' 4.%r在字符串里加字符串 repr原形毕露name='jerd%r'%('bv') #jerd'bv' 5.slice() 切片规则sl = slice(1,4,2) #等同于s1[1:4:2] 6.reversed() 形成一个新的迭代器.li=[1,2,3] 重要的内置函数#1.和对应的迭代对象匹配li=['name','age']li1=['jerd',18]#print(zip(li,li1)) #<zip object at 0x000001BDB8C0CB08> 是迭代器 只能通过for或next取值for i in zip(li,li1): print(i) #('name', 'jerd') ('age', 18) #print(list(i))#2.迭代对象的个数不一一对应时,匹配最少的li=['name','age','hobby']li1=['jerd',18]for i in zip(li,li1): print(i) #('name', 'jerd') ('age', 18)li=['name','age']li1=['jerd',18,'hobby']for i in zip(li,li1): print(i) #('name', 'jerd') ('age', 18)#3.多个迭代对象进行匹配时li=['name','age','high']li1=['jerd',18,'hobby']li2=['sd',15]for i in zip(li,li1,li2): print(i) #('name', 'jerd', 'sd') ('age', 18, 15)'''#2.map(func, *iterables)) 可迭代对象的元素,一个一个传给函数'''def func(x):return x**2#print(map(func,[1,2,3])) #<map object at 0x000001DDE2A37438>for i in map(func,[1,2,3]): print(i) #1,4,9'''#3.filter(function or None, iterable)过滤#1.第一个参数为Nonefor i in filter( None,[1,2,3]): print(i) #1 2 3#2.第一个参数为func。把可迭代对象里的元素一个一个传递给函数,满足函数中内容的就取出来def func(x): return x %2==0for i in filter(func,[0,1,2,4]): print(i,type(i)) #0,2,4 'int'#用列表推导式:li=[0,1,2,4]print([i for i in li if i % 2==0 ]) #[0, 2, 4]#用列表推导式和filter过滤的不同'''1.列表推导式返回列表,占内存2.filter()返回迭代器,省内存3.能与别的函数结合'''#3.sorted((*args, **kwargs) 排序 返回的是列表li=[5,2,3]print(sorted(li)) #[2, 3, 5]#根据字符串长度进行排序#1.使用sorted() 会形成新的列表,排序必须是列表l = ['fsdafsa','fddsaf','qqq','fgasjdlg;dsjfg']def func(x):return len(x)print(sorted(l,key=func)) #l = ['fsdafsa','fddsaf','qqq','fgasjdlg;dsjfg']#2.使用sort 是对原列表进行排序l.sort(key=func)print(l) #['qqq', 'fddsaf', 'fsdafsa', 'fgasjdlg;dsjfg']#3.所有排序方法中,sorted的效率是最高的。它使用c代码编写的#5.都是带key的:zip max min map filter 返回的是迭代器 sorted 返回的是列表#方法中key都是函数名 二.编码知识补充:编码 encode('utf-8') 解码 decode('utf-8')将bytes类型的utf-8编码方式转变成bytes类型gbk编码方式s='中国'.encode('utf-8') #b'\xe4\xb8\xad\xe5\x9b\xbd'print(s)s=s.decode('utf-8').encode('gbk')print(s) #b'\xd6\xd0\xb9\xfa' 三.匿名函数1.func=lambda x:x 面试题:#1.现在有两元祖(('a'),('b')),(('c'),('d')),请使用python 中的匿名函数生成列表[{'a':'c'},{'b':'d'}]func=lambda x,y :[{x[0]:y[0]},{x[1]:y[1]}]tu1=(('a'),('b'))tu2=(('c'),('d'))print(func(tu1,tu2)) #[{'a': 'c'}, {'b': 'd'}]#注意('a')没有逗号,不是元组。类型为字符串 如果当成元组会写成func=lambda x,y :[{x[0][0]:y[0][0]},{x[1][0]:y[1][0]}]#2.现在有两元祖(('a',),('b',)),(('c',),('d',)),请使用python 中的匿名函数生成列表[{'a':'c'},{'b':'d'}]func=lambda x,y :[{x[0][0]:y[0][0]},{x[1][0]:y[1][0]}]tu1=(('a'),('b'))tu2=(('c'),('d'))print(func(tu1,tu2))
|
|