11、python常用知识点

基本数据类型

列表:list

- list.append(obj) # 在列表末尾添加新的对象
- list.count(obj)  # 统计某个元素在列表中出现的次数
- list.extend(seq) # 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
- list.index(obj)  # 从列表中找出某个值第一个匹配项的索引位置
- list.insert(index, obj)# 将对象插入列表
- list.pop(obj=list[-1]) # 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
- list.remove(obj) # 移除列表中某个值的第一个匹配项
- list.reverse()   # 反向列表中元素
- list.sort([func])# 对原列表进行排序
- list.clear()     # 清空列表
- list.copy()      # 复制列表
  • list.copy() 涉及到python的拷贝问题,这是python的浅拷贝。那么顺便说下python的深浅拷贝:浅拷贝只是将容器内的元素的地址复制了一份,深拷贝是完全拷贝了一个副本。详细参考:https://www.jianshu.com/p/7ddbffbee055

字典:dict

- popitem()    # 随机返回并删除字典中的一对键和值(一般删除末尾对)。
- key in dict  # 如果键在字典dict里返回true,否则返回false
- radiansdict.copy()   # 返回一个字典的浅复制
- radiansdict.keys()   # 以列表返回一个字典所有的键
- radiansdict.items()  # 以列表返回可遍历的(键, 值) 元组数组
- radiansdict.clear()  # 删除字典内所有元素
- radiansdict.values() # 以列表返回字典中的所有值
- radiansdict.fromkeys()    # 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
- radiansdict.update(dict2) # 把字典dict2的键/值对更新到dict里
- radiansdict.get(key, default=None)        # 返回指定键的值,如果值不在字典中返回default值
- radiansdict.setdefault(key, default=None) # 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
- pop(key[,default])   # 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
  • 补充字典排序:
    dict1 = {'a': 2, 'e': 3, 'f': 8, 'd': 4}
    list1 = sorted(dict1.items(), key=lambda x: x[1], reverse=True)
    print(list1)
    结果:[('f', 8), ('d', 4), ('e', 3), ('a', 2)]
    详细参考:https://www.jianshu.com/p/e81243f6c6e7

字符串:str

- upper()      # 转换字符串中的小写字母为大写。
- title()      # 返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())。
- lower()      # 转换字符串中所有大写字符为小写。
- rstrip()     # 删除字符串字符串末尾的空格.
- lstrip()     # 截掉字符串左边的空格或指定字符。
- max(str)     # 返回字符串 str 中最大的字母。
- min(str)     # 返回字符串 str 中最小的字母。
- join(seq)    # 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
 ...

整数:int

- bit_length()  # 查询以二进制表示一个数字的值所需的位数
- int.from_bytes(bytes,byteorder)  # 返回给定字节数组所表示的整数。
- int.to_bytes(length,byteorder)   # 返回表示整数的字节数组。

元组:tuple

- len(tuple) # 计算元组元素个数。
- max(tuple) # 返回元组中元素最大值。
- min(tuple) # 返回元组中元素最小值。
- tuple(seq) # 将列表转换为元组。

集合:set

- set1 = set({1, 2, 'barry'}) # 创建集合
- set2 = {1, 2, 'barry'}      # 创建集合
- add  # 将元素添加到集合中。如果元素已经存在,这不起作用。
- del set1  # 删除集合- update # 迭代增加
- clear  # 删除此集合中的所有元素
- remove # 删除一个元素
- pop    # 随机删除一个元素
- issubset    # 子集
- issuperset  # 超集
- union  # 并集。(| 或者 union)
- difference # 差集。(- 或者 difference)
- intersection  # 交集。(&  或者 intersection)
- isdisjoint    # 如果两个集合有一个空交点,则返回True
- intersection_update  # 用它自己和另一个交集更新一个集合。
- difference_update  # 删除另一个集合中本集合所拥有的所有元素
- symmetric_difference  # 反交集。 (^ 或者 symmetric_difference)

浮点:float

- is_integer # 如果浮点数是整数,则返回True
collections:Python内建的一个集合模块,提供了许多有用的集合类。
- Counter     # 是一个简单的计数器,例如,统计字符出现的个数:
- OrderedDict # 可以实现一个FIFO(先进先出)的dict,当容量超出限制时,先删除最早添加的Key:
- deque       # 是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:
- defaultdict # 使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict:
  • import collections
    obj = collections.Counter('aabbccc')
    print(obj)
    结果:Counter({'c': 3, 'a': 2, 'b': 2})
可变与不可变

可变:list,dict
不可变:str, int,touple,float

函数

函数参数传递的是什么? 引用、内存地址

默认参数尽量避免使用可变数据类型
默认参数只会被执行一次:第一次调用函数时,默认参数被初始化为[],以后每次调用时都会使用已经初始化的[]。

def func(a, a1=[]):  # 默认参数
    a1.append(a)
    print(a1)

func(1)
func(1)
func(1)
# 结果:
[1]
[1, 1]
[1, 1, 1]
闭包
def foo():
    m, n=3, 5
    def bar():
        a=4
        return m+n+a
    return bar
>>>bar =  foo()
>>>bar()

说明:
bar在foo函数的代码块中定义。我们称bar是foo的内部函数。
在bar的局部作用域中可以直接访问foo局部作用域中定义的m、n变量。
简单的说,这种内部函数可以使用外部函数变量的行为,就叫闭包。

  • 闭包的意义与应用: 延迟计算;
  • 闭包的意义: 返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域

应用领域:延迟计算(原来我们是传参,现在我们是包起来)
装饰器就是闭包函数的一种应用场景

内置函数

map:
它接受两个参数,分别是函数和列表,这个函数分别作用于列表中每一个元素,把结果作为一个新的列表返回。

map(lambda x, y: x + y, [1, 2, 3, 4, 5], [2, 3, 45, 6, 7])
map(int, ['1', '2', '3'])
结果:[3,5,48,10,12]
     [1,2,3]

reduce:
它也接受两个参数,分别是函数和列表,函数会对参数序列中元素进行累积

reduce(lambda x, y: x+y, [1,2,3,4,5])
结果:15

filter:
它也接受两个参数,分别是函数和列表,函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表

def is_odd(n):
        return n % 2 == 1
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(newlist)
 >>>[1, 3, 5, 7, 9]

zip:
函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

isinstance:
函数来判断一个对象是否是一个已知的类型,类似 type()。

语法:
    isinstance(object, classinfo)
      - object -- 实例对象。
      - classinfo -- 可以是直接或间接类名、基本类型或者由它们组成的元组。
返回值:
    如果对象的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False。。
应用示例:
    >>>a = 2
    >>> isinstance (a,int)
    True
    >>> isinstance (a,str)
    False
    >>> isinstance (a,(str,int,list))    # 是元组中的一个返回 True
    True

isinstance() 与 type()的区别

1. type() 不会认为子类是一种父类类型,不考虑继承关系。
2. isinstance() 会认为子类是一种父类类型,考虑继承关系。
# 如果要判断两个类型是否相同推荐使用 isinstance()。
示例:
    class A:
        pass
    class B(A):
        pass

    isinstance(A(), A)    # returns True
    type(A()) == A        # returns True
    isinstance(B(), A)    # returns True
    type(B()) == A        # returns False

用Python实现⼀个⼆分查找的函数 二分查找算法

简单的说,就是将一个列表先排序好,比如按照从小到大的顺序排列好,当给定一个数据,比如3,查找3在列表中的位置时,可以先找到列表中间的数li[middle]和3进行比较,当它比3小时,那么3一定是在列表的右边,反之,则3在列表的左边,比如它比3小,则下次就可以只比较[middle+1, end]的数,继续使用二分法,将它一分为二,直到找到3这个数返回或者列表全部遍历完成(3不在列表中)

优点:效率高,时间复杂度为O(logN); 
缺点:数据要是有序的,顺序存储。

列表推导式list comprehension和生成器的优劣

  1. 列表推导式是将所有的值一次性加载到内存中
  2. 生成器是将列表推导式的[]改成(),不会将所有的值一次性加载到内存中,延迟计算,一次返回一个结果,
    它不会一次生成所有的结果,这对大数据量处理,非常有用
  • 生成器函数: 一个函数中包含了yield关键词,那么这个函数就不是普通的函数,是一个生成器函数
  • 调用生成器函数,不会立马执行该函数里面的代码, 而是会返回一个 生成器对象

你可能感兴趣的:(11、python常用知识点)