python_learning_note_2
序列
序列用于保存一组有序的数据,所有的数据在序列中都有一个唯一的位置(索引),序列中的数据会按照添加的顺序要分配索引
序列的分类:
- 可变序列(元素可以改变);列表(list)
- 不可变序列:字符串(str)、元组(tuple)
列表
列表中可以保存任意的对象,索引是从0开始的整数
获取列表的长度,即列表中元素的个数,用len()函数
切片语法:列表[起始:结束:步长] ,步长不能为0,但是可以为负数
+可以将两个列表拼接为一个列表 my_list = [1,2,3] + [4,5,6]
* 可以将列表重复指定的次数 my_list = [1,2,3] * 5
in 与 not in 用来检查指定元素是否存在与列表中;max min 用于查找最大最小值
两个方法(method):
list.index() 获取指定元素在列表第一次出现时的索引,第二个与第三个参数为查找的起始与结束位置
list.count() 统计指定元素在列表中出现的次数
修改元素:直接通过索引来修改;通过del来删除元素: del stus[ind]
以上操作只针对可变序列(list),可以通过list()讲其他序列转化为list
list方法
append(): 向列表的最后添加一个元素
insert(): 向列表指定位置插入一个元素 stus.insert(ind,‘str’)
extend(): 使用新的序列扩展当前序列,stus1.extend(stus2) 等价于 stus1 += stus2
clear(): 清空序列
pop(): 根据索引删除并返回被删除的元素 res = suts.pop(ind) ind为空则删除最后一个,其实就是栈的pop
remove(): 删除指定值的元素,如果存在多个,只删除第一个
reverse(): 反转列表
sort(): 默认升序,传递reverse=True为降序
range函数
三个参数:起始位置,结束位置,步长
元组
元组是不可变对象,不能尝试为元组中元素重新赋值
当元组不是空元组时,括号可以省略,其中至少包含一个,(逗号)
my_tuple= (10,20,30,40)
my_tuple = 40,
元组的解包(解构):将元组中每一个元素都赋值给一个变量,两边个数一致,也可以在变量前添加一个*,此时变量会获取剩余所有元素,但是注意不能同时出现两个以上的*
a,b,c,d = my_tuple
a,*b,c = my_tuple
可变对象
每个对象都保存了三个数据
- id(标识)
- type(类型)
- value(值)
字典(dict)
字典属于一种新的数据结构,称为映射(mapping),作用何列表类似,都是用来存储对象的容器。key-value,使用{}来创建字典
语法:{key1:value1,key2:value2,key3:value3},其中value可以是任意对象,key是任意的不可变对象(int、str、bool、tuple等)一般会使用str
使用dict()函数创建字典,每一个参数都是一个键值对
d = dict(name='name',age = 20, gender = 'male')
也可以将一个包含双值子序列的序列转换为字典;双值序列:序列中只有两个值;子序列:序列中的元素也是序列,则称为子序列
d = dict([(’name’,’name’),(‘age’,20)])
len() 获取字典中键值对的个数
get(key,default) 该方法根据键获取值,如果键不在字典中,返回None;也可以指定默认值(第二个参数),返回default
setdefault(key,default) 该方法向字典中添加key-value,如果key已存在,则返回value,不对字典操作;若key不存在,则添加
update([other]) 该方法将其他字典中key-value添加到当前字典中,如果有重复的key,后面的会替换当前的
del 也可以用来删除字典中的key-value
popitem() 就是简单的pop,返回元素是一个tuple=(key,value)
pop() 返回值为value,此时采用第二个参数default作用也是删除不存在key时,返回default
clear() 清空字典
copy() 对字典进行浅复制,复制后的对象和原对象是独立的,修改不会影响。浅复制会简单复制对象内部的值,如果值也是一个可变对象,这个可变对象不会被复制
不同拷贝方式的区别参考:https://zhuanlan.zhihu.com/p/54011712
浅拷贝之所以称为浅拷贝,是它仅仅只拷贝了一层,拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已
对于字典的copy()方法 好像与上述条件是相反的,即对于字典中的可变对象(例如列表、字典等),它们的引用将被共享,即它们的内存地址相同。但是对于字典中的不可变对象(例如字符串、元组、数值类型等),它们的引用不会被共享,即它们的内存地址是不同的。需要注意的是,如果 d 中包含可变对象,例如列表或字典,那么在 d.copy() 执行时,这些可变对象的引用将会被共享,即它们的内存地址是相同的。这是因为浅拷贝只会复制可变对象的引用,而不是复制它们本身。
遍历字典
keys() 该方法会返回字典所有的key (返回格式是list)
values() 该方法会返回所有value
items() 该方法会返回字典中所有的项,格式为list,序列中包含双值子序列
集合
集合与列表非常相似,区别为:集合中只存储不可变对象,是无序的,且不能出现重复的元素
使用{}来创建集合
使用set()来创建集合,也可将序列和字典转换为集合,将字典转换为集合的时候,只包含字典中的key
add() 向集合中添加元素
update() 将一个集合中元素添加到当前集合中
pop() 随机删除并返回
remove() 删除集合中指定元素
clear() 清空集合
copy() 对集合进行浅复制
集合的运算
& 交集运算 | 并集运算 - 差集运算 ^ 异或集:获取置再一个集合中出现的元素 <= 检查一个集合是否是另一个集合的子集 < 检查一个集合是否是另一个集合的真子集 >= 超集 > 真超集