本文共 2320 字,大约阅读时间需要 7 分钟。
Python中的序列类型,序列类型可以使用for循环遍历。
序列类,序列是python中非常重要的协议,如何通过实现这个协议,将类变为序列类。
Python中的序列分类两个维度区分:
from collections import abc
list中的extend方法、+、 +=、以及append区别:
a = [1, 2]# 新对象上+ [3, 4]c = a + [3, 4]#就地加, 还是a对象上边操作a += (3, 4)a.extend(range(3))a.append((1, 2))print(a)打印结果:[1, 2, 3, 4, 0, 1, 2, (1, 2)]
列表的切片:模式[start:end:step]
例如:a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
a[::]
实现可切片对象,最关键的是要实现一个魔法函数:__getitem__
某些情况最好选择Python中其他内置的数据结构:array和deque。
array 和 List 重要区别:
列表推导式:又名列表生成式,通过一行代码来生成列表。
列表生成式性能高于列表操作,
第一:能用尽量用, 因为效率高 第二:如果逻辑过于复杂,建议不要使用,会失去高可读性生成器表达式:改为小括号即可:
(i for i in range(21) if i % 2 == 1)
转换为lsit ,list((i for i in range(21) if i % 2 == 1))
字典推导式:
一行代码生成 dict。from collections.abc import Mapping, MutableMapping
dict属于 mapping 类型
from collections.abc import Mapping, MutableMapping# dict属于 mapping 类型a = {}print(type(a))print(isinstance(a, MutableMapping))打印结果:True
上边代码中,a 并不是继承了MutableMapping,只是实现了MutableMapping中的一些魔法函数。
dict常用方法:
浅拷贝的时候会互相影响:
one = { "a": {"name": "zhao"}, "b": {"age": "20"}}two = one.copy()two['a']['name'] = 'wang'print(two)print(one)打印结果:{'a': {'name': 'wang'}, 'b': {'age': '20'}}{'a': {'name': 'wang'}, 'b': {'age': '20'}}
深拷贝:
import copyone = { "a": {"name": "zhao"}, "b": {"age": "20"}}two = copy.deepcopy(one)two['a']['name'] = 'wang'print(two)print(one)打印结果:{'a': {'name': 'wang'}, 'b': {'age': '20'}}{'a': {'name': 'zhao'}, 'b': {'age': '20'}}
new_list = ["a", "b"]new_dict = dict.fromkeys(new_list, {"age": "18"})运行结果:{'a': {'age': '18'}, 'b': {'age': '18'}}
new_dict = {"a": "a", "b": "b"}print(new_dict.get('c', 'c'))打印结果:c
# dict没有值:a = {"a": "a", "b": "b"}b = a.setdefault("c", "c")print(b)print(a)打印结果:c{'a': 'a', 'b': 'b', 'c': 'c'}
# dict有值a = {"a": "a", "b": "b", "c": "2"}b = a.setdefault("c", "c")print(b)print(a)打印结果:2{'a': 'a', 'b': 'b', 'c': '2'}
可以关注我的微信公众号,会更新Python知识点,也会有其他语言和软件开发中的各种坑,都会记录在公众号。
转载地址:http://ufjko.baihongyu.com/