#1.映射操作 defcapitalize_all(t): res = [] for s in t: res.append(s.capitalize()) return res #简洁写法 defcapitalize_all(t): return [s.capitalize() for s in t]
#2.过滤操作 defonly_upper(t): res = [] for s in t: if s.isupper(): res.append(s) return res #简洁写法 defonly_upper(t): return [s for s in t if s.isupper()]
生成器表达式
类似于列表解析但又不同,经常和sum,max,min之类的函数配合使用
1 2 3 4 5 6 7 8 9
>>> l=[x**2for x inrange(5)] >>> l [0, 1, 4, 9, 16]
>>> g = (x**2for x inrange(5)) >>> g <generator object <genexpr> at 0x7f33f66f2780> >>> sum(g) 30
any和all
any接收一个布尔值组成的序列,其中任何值是True时返回True.
all接收一个布尔值组成的序列,所有值是True时返回True.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#发现禁止字母,返回False defavoids(word,forbidden): for letter in word: if letter in forbidden: returnFalse returnTrue #改写 defavoids(word,forbidden): returnnotany(letter in forbidden for letter in word)
#单词必须使用required中的全部字母 defuses_all(word,required): for letter in required: if letter notin word: returnFalse returnTrue #改写 defuses_all(word,required): returnall(letter in word for letter in required)
集合
有些问题可以借助集合处理.
1 2 3 4 5 6 7 8 9 10 11 12
#第一次出现时加入词典,再次出现时函数返回True defhas_duplicates(t): d={} for x in t: if x in d: returnTrue d[x] = True returnFalse
>>> for val,freq in count.most_common(3): ... print(val,freq) ... ('r', 2) ('a', 1) ('p', 1)
命名元组
提供了快速定义简单类的方法;如果类变得很复杂,可以定义新类继承当前的命名元组,或者使用原始类定义.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#定义一个Point对象 classPoint: def__init__(self,x=0,y=0): self.x = x self.y = y def__str__(self,): return'(%g,%g)'%(self.x,self.y) #改写 from collections import namedtuple Point = namedtuple('Point',['x','y'])
>>> Point <class'__main__.Point'> >>> p = Point(1,2) >>> p Point(x=1,y=2)
收集参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#收集任意个数的按位实参并输出 defprintall(*args): print(args) >>> printall(1,2.0,'3') (1, 2.0, '3') >>> printall(1,2.0,third='3') Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: printall() got an unexpected keyword argument 'third'