python基础 1.enumerate函数 用于返回(i, value)
元组序列,可以跟踪当前项的序号。
1 2 for (i,value) in enumerate(tup): print(str(i)+":"+value)
2.sorted函数 1 2 3 4 5 In : sorted([7, 1, 2, 6, 0, 3, 2]) Out: [0, 1, 2, 2, 3, 6, 7] In : sorted('horse race')#对字符串进行排序 Out: [' ', 'a', 'c', 'e', 'e', 'h', 'o', 'r', 'r', 's']
sorted()函数与sort()函数不同,会返回一个排序列表,而不改变原有序列
1 2 3 4 5 6 7 8 9 10 11 in :tup1=[2,6,8,1] tup1.sort() print(tup1) out:[1, 2, 6, 8] in :tup1=[2,6,8,1] tup2=sorted(tup1) print(tup2) print(tup1) out:[1, 2, 6, 8] [2, 6, 8, 1]
sort()可以接受两个参数sort(key,reverse)
key接受的函数返回值,表示此元素的权值,sort将按照权值大小进行排序
1 2 3 4 5 6 7 in: x=[8,9,0,7,4,5,1,2,3,6] def size(a): x=10-int(a) return x x.sort(key=size) print(x) out:[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
reverse接受的是一个bool类型的值 (Ture or False),表示是否颠倒排列顺序,一般默认的是False
1 2 3 4 in :x=[8,9,0,7,4,5,1,2,3,6] x.sort(reverse=True) print(x) out:[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
sort根据关键字排序
1 2 3 4 in :l = [[1,2,3],[2,2,1],[2,1,3]] l.sort(key = lambda x: (x[0],-x[1])) print(l) out:[[1, 2, 3], [2, 2, 1], [2, 1, 3]]
注:其中key表示按第几个关键字排序,lambda x:后()中的元素表示了关键字的优先级(由高至低),x[0]表示按第一个关键词的升序排列,-x[1]表示按第二个关键词的降序排列
3.zip函数 zip
可以将多个列表、元组或其它序列成对组合成一个元组列表:
1 2 3 4 5 In :tup1=1,2,3 tup2='a','b','c' ziped=zip(tup1,tup2) list(ziped) out:[(1, 'a'), (2, 'b'), (3, 'c')]
处理任意多的序列,元素的个数取决于最短的序列
1 2 3 4 5 6 In :tup1=1,2,3 tup2='a','b','c' tup3=False,True ziped=zip(tup1,tup2,tup3) list(ziped) out:[(1, 'a', False), (2, 'b', True)]
(1)zip函数的常见用法:同时迭代多个序列
1 2 3 4 5 6 7 in :tup1=1,2,3 tup2='a','b','c' for i,(value1,value2) in enumerate(zip(tup1,tup2)): print('{0}:{1},{2}'.format(i,value1,value2)) out:0:1,a 1:2,b 2:3,c
(2)zip函数的常见用法:解压序列
1 2 3 4 5 6 in :pitchers = [('Nolan', 'Ryan'), ('Roger', 'Clemens'),('Schilling', 'Curt')] first_names, last_names = zip(*pitchers) print(first_names) print(last_names) out:('Nolan', 'Roger', 'Schilling') ('Ryan', 'Clemens', 'Curt')
4.reversed函数 用于从后向前迭代序列
1 2 3 4 in :tup = tuple('string') for (i,value) in enumerate(reversed(tup)):#从后向前迭代元组 print(str(i)+":"+value,end=' ') out:0:g 1:n 2:i 3:r 4:t 5:s
5.匿名(lambda)函数 由单条语句组成,该语句的结果就是返回值。
1 2 3 4 5 6 7 8 9 10 11 in :def apply_to_list(some_list, f): return [f(x) for x in some_list] ints = [4, 0, 1, 5, 6] apply_to_list(ints, lambda x: x * 2)#':'前为参数,':'后为运算表达式 out:[8, 0, 2, 10, 12] in :strings = ['foo', 'card', 'bar', 'aaaa', 'abab'] strings.sort(key=lambda x: len(set(list(x))))#根据不同字母的数量,对strings排序 print(strings) out:['aaaa', 'foo', 'abab', 'bar', 'card']
6.迭代器 可迭代对象 :可迭代的对象要有_iter_()方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #常见的可迭代对象 iterables=[ "123",#字符串 [1,2,3],#列表 (1,2,3),#元组 {1:'a',2:'b'},#字典 {1,2,3},#集合 ] for iterable in iterables: print(type(iterable)) for x in iterable: print(x,end=',') print('') out: <class 'str'> 1,2,3, <class 'list'> 1,2,3, <class 'tuple'> 1,2,3, <class 'dict'> 1,2, <class 'set'> 1,2,3,
迭代器: 有_next()方法的可迭代对象,即迭代器既有_iter\ ()方法,又有_next_()方法。
1 2 3 4 5 6 7 #列表不是迭代器 from collections.abc import Iterator lst=[1,2,3] isinstance(lst,Iterator) out: False
1 2 3 4 5 6 #iter(lst)是迭代器 x=iter(lst) isinstance(x,Iterator) out: True
1 2 3 4 5 6 7 8 in: x.__next__() out:1 in: x.__next__() out:2 in: next(x) out:3
自定义迭代器: 为类添加_iter_()方法和_next_()方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #定义一个将字符串反序输出的迭代器 class ReverseIterator: def __init__(self, data): self.data = data self.index = len(data) def __iter__(self): return self def __next__(self): if self.index <= 0: raise StopIteration self.index -= 1 return self.data[self.index] r=ReverseIterator('abc') for i in r: print(i) out: c b a
7.生成器 生成器 :一种特殊的迭代器,通过函数的方式来定义,使用关键字yield 来返回值,而不是使用return 。当生成器函数被调用时,它并不会立即执行函数体,而是返回一个生成器对象,该对象可以用于逐步迭代产生值。
1 2 3 4 5 6 7 8 9 10 11 def countdown(n): while n > 0: yield n n -= 1 # 使用生成器进行迭代 for num in countdown(5): print(num, end=" ") out: 5 4 3 2 1
注:yield 语句右边的对象作为next()的返回值,生成器在yield所在的位置暂停,当再次使用next()时继续从该位置继续运行。
8.collections.Counter collections.Counter: 是Python标准库中的一个类,用于计数可哈希对象(通常是元素或元素组成的集合)的出现次数。
collections.Counter是一个字典的子类,提供了方便的计数功能,可以用于各种计数和统计场景
8.1 创建计数器 可以通过传入可迭代对象(如列表、元组、字符串等)或字典来创建计数器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 from collections import Counter # 通过列表创建计数器 a= Counter(['apple', 'orange', 'apple', 'banana', 'apple']) # 通过字符串创建计数器 b = Counter('hello') # 通过字典创建计数器 c = Counter({'apple': 3, 'orange': 2, 'banana': 1}) a,b,c out: (Counter({'apple': 3, 'orange': 1, 'banana': 1}), Counter({'h': 1, 'e': 1, 'l': 2, 'o': 1}), Counter({'apple': 3, 'orange': 2, 'banana': 1}))
8.2 计数元素的出现次数 可以使用elements()
方法获取计数器中所有元素的迭代器,也可以使用普通的字典语法或get()
方法获取指定元素的出现次数。
1 2 3 4 5 6 7 c = Counter('abracadabra') print(c) # Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1}) print(c['a']) # 5 print(c.get('b')) # 2 elements = list(c.elements()) # ['a', 'a', 'a', 'a', 'a', 'b', 'b', 'r', 'r', 'c', 'd']
8.3 获取最常见的元素 可以使用most_common()
方法获取计数器中出现频率最高的元素。该方法返回一个列表,其中每个元素是一个元组,包含元素和对应的计数。
1 2 3 4 5 c = Counter('abracadabra') print(c.most_common(2)) out: [('a', 5), ('b', 2)]
8.4 更新计数器 可以使用update()
方法将另一个计数器、可迭代对象或字典的元素合并到当前计数器中。
1 2 3 4 5 c1 = Counter('abracadabra') c2 = Counter('alakazam') c1.update(c2) # 合并c2中的计数到c1中 print(c1) # Counter({'a': 8, 'b': 2, 'r': 2, 'l': 1, 'k': 1, 'z': 1, 'm': 1})