• Python学习基础笔记二十八——内置函数2


    1 数据结构相关的:

    1.1 序列:

    1.1.1 列表和元组:

    1)list(): 列表

    2)tuple(): 元组

    3)reverse(): 原来列表的顺序不在意,只占一个列表的空间;

    reversed(): 产生一个反序迭代器,如果需要保留原来的顺序,还要反转,那就返回一个反转迭代器。

    4)slice(): 切片

    1. l = (1, 2, 23, 5, 6, 12, 4)
    2. sli = slice(1, 5, 2) # 获得的是一个切片规则
    3. print(l[sli])
    4. # (2, 5)

    1.1.2 字符串

    1)str()

    2)format() 1)数值字符串格式化显示;

    1. print(format('test', '<20')) # 20个字符占位,左靠齐
    2. print(format('test', '>20')) # 20个字符占位,右靠齐
    3. print(format('test', '^20')) # 20个字符占位,居中

    3)bytes():  转成bytes类型。

    在编码的时候都是unicode,转成bytes字节都是为了存储和转发。

    1. print(bytes('你好', encoding='GBK')) #unicode转换成gbk的bytes
    2. print(bytes('你好', encoding='UTF-8')) #unicode转换成utf-8的bytes

    网络编程,只能传二进制;

    照片和视频:也是二进制存储的。

    HTML网页:爬取到内存也是bytes编码。

    4)bytearray:byte类型的数组。修改一个长字符串,直接以这种形式。例如一个汉字是三个字节,直接修改三个字节,便可以修改成功。修改字符串的时候,可以节省内存。

    1. b_array = bytes('你好', encoding='utf-8')
    2. print(b_array)
    3. print(b_array[0])
    4. # b'\xe4\xbd\xa0\xe5\xa5\xbd'
    5. # 228

    5)memoryview(): 

    6)ord():  字符按照unicode转数字;

    1. print(ord('a'))
    2. # 97
    3. print(ord('1'))
    4. # 49

    7)chr(): 数字按照unicode转字符:

    1. print(chr(97))
    2. # a

    8)ascii(): 只要是ascii码中的内容,就打印出来,不是就转换成\u。

    1. print(ascii('a'))
    2. # a
    3. print(ascii(1))
    4. # 1
    5. print(ascii('好'))
    6. # '\u597d'

    9)repr(): 用于%r格式化输出。 

    1. name = 'egg'
    2. print('Hello, %r' % name)
    3. print(repr('1'))
    4. # '1'
    5. print(repr(1))
    6. # 1

    10)dict(): 大括号括起来的,就是无序的。

    11)set(): 集合,去重的功能。

    12)frozenset(): 不可变的set集合。fronzenset是不可变,就可以作为字典的key。

    13)len():  长度。

    14)enumerate(): 

    15)all(): 判断是否有bool值为False的值。

    1. print(all(['a', '', 123]))
    2. # False
    3. print(all([0, 123]))
    4. # False

    16)any(): 判断是否有bool值为True的值

    1. print(any(['', True, 0, []]))
    2. # True

    17)zip(): 返回一个迭代器。“拉链方法”

    1. l1 = ['a', 'b', 'c']
    2. l2 = [1, 2, 3]
    3. l3 = ('*', '**', '***')
    4. d4 = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
    5. for i in zip(l1, l2, l3, d4):
    6. print(i)
    7. # ('a', 1, '*', 'k1')
    8. # ('b', 2, '**', 'k2')
    9. # ('c', 3, '***', 'k3')

    18)filter(): filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 Falsefilter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。

    1. def is_odd(x):
    2. return x % 2 == 1
    3. l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    4. ret = file(is_odd, l) # 参数只接收判断函数名(内存地址),是一个可迭代的列表
    5. print(ret)
    6. for i in ret:
    7. print(i)

    返回的是迭代器。目的是为了节省内存。

    这个filter的过滤方法,它跟列表推导式的效果是一样的,但是可以做更复杂的事情。

    1. def is_str(x):
    2. if type(x) == str:
    3. return True
    4. li = [1, 2, 'java', 'C/C++', 3, 4, 'python']
    5. ret = filter(is_str, li)
    6. for i in ret:
    7. print(i)
    8. # java
    9. # C/C++
    10. # python

    再看一个例子:请用filter过滤出1~100平方根是整数的数。

    1. import math
    2. def is_sqr(x):
    3. return math.sqrt(x) % 1 == 0 # 过滤出1~100的平方根是整数的数
    4. print(list(filter(is_sqr, range(1, 101))))
    5. #

    删除None或者空字符串:

    1. def is_not_empty(s):
    2. return s and len(str(s).strip()) > 0
    3. li = ['test', None, '', 'str', ' ', 'END', 'python', 1, 2]
    4. ret = filter(is_not_empty, li)
    5. for i in ret:
    6. print(i)
    7. # test
    8. # str
    9. # END
    10. # python

    通过判断函数进行判断,True就返回,False就过滤掉。

    19)map(): 从可迭代的拿出元素,执行前面的函数功能。

    map函数应用于每一个可迭代的项,返回的是一个结果list。如果有其他的可迭代参数传进来,map函数则会把每一个参数都以相应的处理函数进行迭代处理。map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

    1. ret = map(abs, [1, -4, 6, -8])
    2. print(ret)
    3. for i in ret:
    4. 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进行排序,返回副本,原始输入不变

    1. l1 = [1, 2, 4, -3, 0, 8, 9]
    2. l1.sort(key=abs, reverse=True) # 在原表的基础上进行排序
    3. print(l1)
    4. l2 = [8, 9, 7, 5, 4, 6, -10]
    5. ret = sorted(l2, key=abs, reverse=False) # 原表不变, 对副本进行排序
    6. print("Before sorted:", l2)
    7. print("Return value of sorted:", ret)

    Python自带的排序算法性能是非常快的。

    题目:按照列表的长度进行排序。

    1. l = [' ', [1, 2], 'Hello World!']
    2. new_l = sorted(l, key=len) # 根据列表的长度len进行排序,我们放到key=参数
    3. print(new_l)
    4. # [[1, 2], 'Hello World!', ' ']

     我们可以通过key来指定一些函数,让它做我们需要做的事情。

  • 相关阅读:
    注释那些事
    CF1325D ( 异或和和性质
    Linux文件重命名批量操作(截取特定位置的字符)
    双千兆网口路由器方案开发板香橙派R1 Plus LTS连接USB无线网卡测试说明(OpenWRT 系统)
    Python 组合序号
    没有公网IP?快解析实现内网穿透
    Redis主从同步与故障切换,有哪些坑?
    Kotlin第五弹:数据容器
    Python爬虫从端到端抓取网页
    在京东如何做好前端系统的可观测性
  • 原文地址:https://blog.csdn.net/chang_chunhua/article/details/128197253