1 数据结构相关的:
1.1 序列:
1.1.1 列表和元组:
1)list(): 列表
2)tuple(): 元组
3)reverse(): 原来列表的顺序不在意,只占一个列表的空间;
reversed(): 产生一个反序迭代器,如果需要保留原来的顺序,还要反转,那就返回一个反转迭代器。
4)slice(): 切片
- l = (1, 2, 23, 5, 6, 12, 4)
- sli = slice(1, 5, 2) # 获得的是一个切片规则
- print(l[sli])
-
- # (2, 5)
1.1.2 字符串
1)str()
2)format() 1)数值字符串格式化显示;
- print(format('test', '<20')) # 20个字符占位,左靠齐
- print(format('test', '>20')) # 20个字符占位,右靠齐
- print(format('test', '^20')) # 20个字符占位,居中
3)bytes(): 转成bytes类型。
在编码的时候都是unicode,转成bytes字节都是为了存储和转发。
- print(bytes('你好', encoding='GBK')) #unicode转换成gbk的bytes
- print(bytes('你好', encoding='UTF-8')) #unicode转换成utf-8的bytes
网络编程,只能传二进制;
照片和视频:也是二进制存储的。
HTML网页:爬取到内存也是bytes编码。
4)bytearray:byte类型的数组。修改一个长字符串,直接以这种形式。例如一个汉字是三个字节,直接修改三个字节,便可以修改成功。修改字符串的时候,可以节省内存。
- b_array = bytes('你好', encoding='utf-8')
- print(b_array)
- print(b_array[0])
-
- # b'\xe4\xbd\xa0\xe5\xa5\xbd'
- # 228
5)memoryview():
6)ord(): 字符按照unicode转数字;
- print(ord('a'))
-
- # 97
-
- print(ord('1'))
-
- # 49
7)chr(): 数字按照unicode转字符:
- print(chr(97))
-
- # a
8)ascii(): 只要是ascii码中的内容,就打印出来,不是就转换成\u。
- print(ascii('a'))
- # a
- print(ascii(1))
- # 1
- print(ascii('好'))
- # '\u597d'
9)repr(): 用于%r格式化输出。
- name = 'egg'
- print('Hello, %r' % name)
-
- print(repr('1'))
- # '1'
- print(repr(1))
- # 1
10)dict(): 大括号括起来的,就是无序的。
11)set(): 集合,去重的功能。
12)frozenset(): 不可变的set集合。fronzenset是不可变,就可以作为字典的key。
13)len(): 长度。
14)enumerate():
15)all(): 判断是否有bool值为False的值。
- print(all(['a', '', 123]))
- # False
- print(all([0, 123]))
- # False
16)any(): 判断是否有bool值为True的值
- print(any(['', True, 0, []]))
- # True
17)zip(): 返回一个迭代器。“拉链方法”
- l1 = ['a', 'b', 'c']
- l2 = [1, 2, 3]
- l3 = ('*', '**', '***')
- d4 = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
-
- for i in zip(l1, l2, l3, d4):
- print(i)
-
- # ('a', 1, '*', 'k1')
- # ('b', 2, '**', 'k2')
- # ('c', 3, '***', 'k3')
18)filter(): filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。
- def is_odd(x):
- return x % 2 == 1
-
-
- l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
-
- ret = file(is_odd, l) # 参数只接收判断函数名(内存地址),是一个可迭代的列表
- print(ret)
-
- for i in ret:
- print(i)
返回的是迭代器。目的是为了节省内存。
这个filter的过滤方法,它跟列表推导式的效果是一样的,但是可以做更复杂的事情。
- def is_str(x):
- if type(x) == str:
- return True
-
-
- li = [1, 2, 'java', 'C/C++', 3, 4, 'python']
-
- ret = filter(is_str, li)
-
- for i in ret:
- print(i)
-
- # java
- # C/C++
- # python
再看一个例子:请用filter过滤出1~100平方根是整数的数。
- import math
-
-
- def is_sqr(x):
- return math.sqrt(x) % 1 == 0 # 过滤出1~100的平方根是整数的数
-
-
- print(list(filter(is_sqr, range(1, 101))))
-
- #
删除None或者空字符串:
- def is_not_empty(s):
- return s and len(str(s).strip()) > 0
-
-
- li = ['test', None, '', 'str', ' ', 'END', 'python', 1, 2]
-
- ret = filter(is_not_empty, li)
-
- for i in ret:
- print(i)
-
- # test
- # str
- # END
- # python
通过判断函数进行判断,True就返回,False就过滤掉。
19)map(): 从可迭代的拿出元素,执行前面的函数功能。
map函数应用于每一个可迭代的项,返回的是一个结果list。如果有其他的可迭代参数传进来,map函数则会把每一个参数都以相应的处理函数进行迭代处理。map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。
- ret = map(abs, [1, -4, 6, -8])
-
- print(ret)
-
- for i in ret:
- print(i)
跟filter比较:
1)filter只是筛选,不会改变原来的值;filter执行了filter之后的结果集合<= 执行之前的个数;
2)map执行前后元素个数不变,值可能发生变化;map地方的abs函数位置,我们可以自定义。
20)sorted():
对List、Dict进行排序,Python提供了两个方法
对给定的List L进行排序,
方法1.用List的成员函数sort进行排序,在本地进行排序,不返回副本
方法2.用built-in函数sorted进行排序,返回副本,原始输入不变
- l1 = [1, 2, 4, -3, 0, 8, 9]
- l1.sort(key=abs, reverse=True) # 在原表的基础上进行排序
- print(l1)
-
- l2 = [8, 9, 7, 5, 4, 6, -10]
- ret = sorted(l2, key=abs, reverse=False) # 原表不变, 对副本进行排序
- print("Before sorted:", l2)
- print("Return value of sorted:", ret)

Python自带的排序算法性能是非常快的。
题目:按照列表的长度进行排序。
- l = [' ', [1, 2], 'Hello World!']
-
- new_l = sorted(l, key=len) # 根据列表的长度len进行排序,我们放到key=参数
- print(new_l)
-
- # [[1, 2], 'Hello World!', ' ']
我们可以通过key来指定一些函数,让它做我们需要做的事情。