二.列表、元组和集合
1.Python的数据结构
- Container容器:
- 序列:
- string字符串:"abcd",'ABCD' ---不可变
- string由于属于序列,所以可以索引
- tuple元组:(1,2,34,"abc") --- 不可变
- list列表:[1,2,"123"] ---可变
- string字符串:"abcd",'ABCD' ---不可变
- 映射:dict字典: {"key":"map"} --- 可变
- 集合:set
- 序列:
- ()含有不可变属性,如函数中的参数输入,元组等
- []含有可变属性,同时也具备索引属性。无论是list还是dict,都是以[index]模式进行索引
- {}含有映射属性,dict字典、string中format使用
2.序列操作
- 索引:AAA[-1]表示最后一个数,-1表示序列倒数第一个数,正数是0开始。
- 切片A[a:b:c]:
- a开始位置(有a)、b结束位置(无b)。
- ab孰大孰小取决于步长c。
- ab可以不写,表示极端位置。
- 序列相加:注意不是矩阵运算,不能拼接不同类型的序列。
- 乘法:
a=[None,1] print(a*3) >>>[None, 1, None, 1, None, 1]
- 成员资格,运算符in:
print(2 in ["a",2]) #True print("b" in ("b",2)) #True print("C" in "China") #True
3.复制的相关问题:
- 浅复制与深复制:
a=[1,2,3,["a","b"]] b=a #建立指针 c=a.copy() #浅复制,只能复制第一层,更高层建立指针 from copy import deepcopy d=deepcopy(a) #深复制,复制内存
- 切片赋值:
#切片赋值,也只能复制第一层 list1=[1,"a",2,["ABC",123]] n=list1[:] print(n,list1) #[1, 'a', 2, ['ABC', 123]] [1, 'a', 2, ['ABC', 123]] n[0]=2 n[-1][-1]=456 print(n,list1) #[2, 'a', 2, ['ABC', 456]] [1, 'a', 2, ['ABC', 456]]
4.元组
- 表示只包含一个元素的元组:(42,),这里必须要加逗号才可以表示元组,(42)=42。
5.集合
#集合,没有重复的元素 a=set([1,2,3,4,2,1]) print(a) #{1, 2, 3, 4} #{...}来设定集合,但是不能{},{}表示字典 b={2,3,8,8,8,8,"abc","abc","abc"} print(b) #{8, 2, 3, 'abc'} print(a.union(b),a|b,a&b) #集合运算 #集合是可变的,不能用作字典中的键。集合只能包含不可变(可散列)的值,不能包含其他集合 a.add(frozenset(b)) #如果要包含其他集合,必须冻结住该集合 print(a) #{1, 2, 3, 4, frozenset({8, 2, 3, 'abc'})}