三.列表
一)定义
1 # 定义:在[]内,用逗号分隔开多个任意数据类型的值 2 l1 = [1,'a',[1,2]] # 本质:l1 = list([1,'a',[1,2]])
二)类型转换
1 # 但凡能被for循环遍历的数据类型都可以传给list()转换成列表类型,list()会跟for循环一样遍历出数据类型中包含的每一个元素然后放到列表中 2 >>> list('wdad') # 结果:['w', 'd', 'a', 'd'] 3 >>> list([1,2,3]) # 结果:[1, 2, 3] 4 >>> list({"name":"jason","age":18}) #结果:['name', 'age'] 5 >>> list((1,2,3)) # 结果:[1, 2, 3] 6 >>> list({1,2,3,4}) # 结果:[1, 2, 3, 4]
三)使用
1)优先掌握的操作
1 # 1.按索引存取值(正向存取+反向存取):即可存也可以取
2 # 1.1 正向取(从左往右)
3 >>> my_friends=['tony','jason','tom',4,5]
4 >>> my_friends[0]
5 tony
6 # 1.2 反向取(负号表示从右往左)
7 >>> my_friends[-1]
8 5
9 # 1.3 对于list来说,既可以按照索引取值,又可以按照索引修改指定位置的值,但如果索引不存在则报错
10 >>> my_friends = ['tony','jack','jason',4,5]
11 >>> my_friends[1] = 'martthow'
12 >>> my_friends ['tony', 'martthow', 'jason', 4, 5]
13
14 # 2.切片(顾头不顾尾,步长)
15 # 2.1 顾头不顾尾:取出索引为0到3的元素
16 >>> my_friends[0:4] ['tony', 'jason', 'tom', 4]
17 # 2.2 步长:0:4:2,第三个参数2代表步长,会从0开始,每次累加一个2即可,所以会取出索引0、2的元素
18 >>> my_friends[0:4:2] ['tony', 'tom']
19 # 3.长度
20 >>> len(my_friends)
21 5
22 # 4.成员运算in和not in
23 >>> 'tony' in my_friends
24 True
25 >>> 'xxx' not in my_friends
26 True
27 # 5.添加
28 # 5.1 append()列表尾部追加元素
29 >>> l1 = ['a','b','c']
30 >>> l1.append('d')
31 >>> l1 ['a', 'b', 'c', 'd']
32 # 5.2 extend()一次性在列表尾部添加多个元素
33 >>> l1.extend(['a','b','c'])
34 >>> l1 ['a', 'b', 'c', 'd', 'a', 'b', 'c']
35 # 5.3 insert()在指定位置插入元素
36 >>> l1.insert(0,"first")
37 # 0表示按索引位置插值
38 >>> l1 ['first', 'a', 'b', 'c', 'd', 'a', 'b', 'c']
39 # 6.删除
40 # 6.1 del
41 >>> l = [11,22,33,44]
42 >>> del l[2]
43 # 删除索引为2的元素
44 >>> l [11,22,44]
45 # 6.2 pop()默认删除列表最后一个元素,并将删除的值返回,括号内可以通过加索引值来指定删除元素
46 >>> l = [11,22,33,22,44]
47 >>> res=l.pop() >>> res 44
48 >>> res=l.pop(1)
49 >>> res 22
50 # 6.3 remove()括号内指名道姓表示要删除哪个元素,没有返回值
51 >>> l = [11,22,33,22,44]
52 >>> res=l.remove(22)
53 # 从左往右查找第一个括号内需要删除的元素
54 >>> print(res) None
55 # 7.reverse()颠倒列表内元素顺序
56 >>> l = [11,22,33,44]
57 >>> l.reverse()
58 >>> l [44,33,22,11]
59 # 8.sort()给列表内所有元素排序
60 # 8.1 排序时列表元素之间必须是相同数据类型,不可混搭,否则报错
61 >>> l = [11,22,3,42,7,55] >>> l.sort()
62 >>> l [3, 7, 11, 22, 42, 55]
63 # 默认从小到大排序
64 >>> l = [11,22,3,42,7,55]
65 >>> l.sort(reverse=True)
66 # reverse用来指定是否跌倒排序,默认为False
67 >>> l [55, 42, 22, 11, 7, 3]
68 # 8.2 了解知识:
69 # 我们常用的数字类型直接比较大小,但其实,字符串、列表等都可以比较大小,原理相同:都是依次比较对应位置的元素的大小,如果分出大小,则无需比较下一个元素,比如
70 >>> l1=[1,2,3]
71 >>> l2=[2,]
72 >>> l2 > l1 True
73 # 字符之间的大小取决于它们在ASCII表中的先后顺序,越往后越大
74 >>> s1='abc'
75 >>> s2='az'
76 >>> s2 > s1
77 # s1与s2的第一个字符没有分出胜负,但第二个字符'z'>'b',所以s2>s1成立 True # 所以我们也可以对下面这个列表排序
78 >>> l = ['A','z','adjk','hello','hea']
79 >>> l.sort()
80 >>> l ['A', 'adjk', 'hea', 'hello','z']
81 # 9.循环 # 循环遍历my_friends列表里面的值
82 for line in my_friends:
83 print(line)
84 'tony' 'jack' 'jason' 4 5
2)了解操作
1 >>> l=[1,2,3,4,5,6]
2 >>> l[0:3:1]
3 [1, 2, 3] # 正向步长
4 >>> l[2::-1]
5 [3, 2, 1] # 反向步长
6
7 # 通过索引取值实现列表翻转
8 >>> l[::-1]
9 [6, 5, 4, 3, 2, 1]
五.元组
一)作用
元组与列表类似,也是可以存多个任意类型的元素,不同之处在于元祖的元素不能修改,即元组相当于不可变的列表,用于记录多个固定不允许修改的值,单纯用于取
二)定义
1 # 在()内用逗号分隔开多个任意类型的值
2 >>> countries = ("中国","美国","英国")
3 # 本质:countries = tuple("中国","美国","英国")
4 # 强调:如果元组内只有一个值,则必须加一个逗号,否则()就只是包含的意思而非定义元组
5 >>> countries = ("中国",) # 本质:countries = tuple("中国")
三)转换类型
1 # 但凡能被for循环的遍历的数据类型都可以传给tuple()转换成元组类型 2 >>> tuple('wdad') # 结果:('w', 'd', 'a', 'd') 3 >>> tuple([1,2,3]) # 结果:(1, 2, 3) 4 >>> tuple({"name":"jason","age":18}) # 结果:('name', 'age') 5 >>> tuple((1,2,3)) # 结果:(1, 2, 3) 6 >>> tuple({1,2,3,4}) # 结果:(1, 2, 3, 4) 7 # tuple()会跟for循环一样遍历出数据类型中包含的每一个元素然后放到元组中
四)使用
1 >>> tuple1 = (1, 'hhaha', 15000.00, 11, 22, 33)
2 # 1、按索引取值(正向取+反向取):只能取,不能改否则报错!
3 >>> tuple1[0]
4 1
5 >>> tuple1[-2]
6 22
7 >>> tuple1[0] = 'hehe' # 报错:TypeError:
8
9 # 2、切片(顾头不顾尾,步长)
10 >>> tuple1[0:6:2]
11 (1, 15000.0, 22)
12
13 # 3、长度
14 >>> len(tuple1)
15 6
16
17 # 4、成员运算 in 和 not in
18 >>> 'hhaha' in tuple1
19 True
20 >>> 'hhaha' not in tuple1
21 False
22
23 # 5、循环
24 >>> for line in tuple1:
25 ... print(line)
26 1
27 hhaha
28 15000.0
29 11
30 22
31 33
六.字典
一)定义:在{}内用逗号分隔开多元素,每一个元素都是key:value的形式,其中value可以是任意类型,而key则必须是不可变类型,详见第八小节,通常key应该是str类型,因为str类型会对value有描述性的功能
1 #定义 2 info={'name':'tony','age':18,'sex':'male'} 3 #本质info=dict({....}) 4 # 也可以这么定义字典 5 info=dict(name='tony',age=18,sex='male') 6 # info={'age': 18, 'sex': 'male', 'name': 'tony'}
二)类型转换
1 # 转换1: 2 >>> info=dict([['name','tony'],('age',18)]) 3 >>> info 4 {'age': 18, 'name': 'tony'} 5 6 # 转换2:fromkeys会从元组中取出每个值当做key,然后与None组成key:value放到字典中 7 >>> {}.fromkeys(('name','age','sex'),None) 8 {'age': None, 'sex': None, 'name': None}
三)使用
1)优先掌握
1 # 1、按key存取值:可存可取 2 # 1.1 取 3 >>> dic = { 4 ... 'name': 'xxx', 5 ... 'age': 18, 6 ... 'hobbies': ['play game', 'basketball'] 7 ... } 8 >>> dic['name'] 9 'xxx' 10 >>> dic['hobbies'][1] 11 'basketball' 12 # 1.2 对于赋值操作,如果key原先不存在于字典,则会新增key:value 13 >>> dic['gender'] = 'male' 14 >>> dic 15 {'name': 'tony', 'age': 18, 'hobbies': ['play game', 'basketball'],'gender':'male'} 16 # 1.3 对于赋值操作,如果key原先存在于字典,则会修改对应value的值 17 >>> dic['name'] = 'tony' 18 >>> dic 19 {'name': 'tony', 'age': 18, 'hobbies': ['play game', 'basketball']} 20 21 22 # 2、长度len 23 >>> len(dic) 24 3 25 26 27 # 3、成员运算in和not in 28 >>> 'name' in dic # 判断某个值是否是字典的key 29 True 30 31 32 # 4、删除 33 >>> dic.pop('name') # 通过指定字典的key来删除字典的键值对 34 >>> dic 35 {'age': 18, 'hobbies': ['play game', 'basketball']} 36 37 38 # 5、键keys(),值values(),键值对items() 39 >>> dic = {'age': 18, 'hobbies': ['play game', 'basketball'], 'name': 'xxx'} 40 # 获取字典所有的key 41 >>> dic.keys() 42 dict_keys(['name', 'age', 'hobbies']) 43 # 获取字典所有的value 44 >>> dic.values() 45 dict_values(['xxx', 18, ['play game', 'basketball']]) 46 # 获取字典所有的键值对 47 >>> dic.items() 48 dict_items([('name', 'xxx'), ('age', 18), ('hobbies', ['play game', 'basketball'])]) 49 50 51 # 6、循环 52 # 6.1 默认遍历的是字典的key 53 >>> for key in dic: 54 ... print(key) 55 ... 56 age 57 hobbies 58 name 59 # 6.2 只遍历key 60 >>> for key in dic.keys(): 61 ... print(key) 62 ... 63 age 64 hobbies 65 name 66 # 6.3 只遍历value 67 >>> for key in dic.values(): 68 ... print(key) 69 ... 70 18 71 ['play game', 'basketball'] 72 xxx 73 # 6.4 遍历key与value 74 >>> for key in dic.items(): 75 ... print(key) 76 ... 77 ('age', 18) 78 ('hobbies', ['play game', 'basketball']) 79 ('name', 'xxx')
2)需要掌握:
1.get()
1 >>> dic= {'k1':'jason','k2':'Tony','k3':'JY'} 2 >>> dic.get('k1') 3 'jason' # key存在,则获取key对应的value值 4 >>> res=dic.get('xxx') # key不存在,不会报错而是默认返回None 5 >>> print(res) 6 None 7 >>> res=dic.get('xxx',666) # key不存在时,可以设置默认返回的值 8 >>> print(res) 9 666 10 # ps:字典取值建议使用get方法
2.pop()
1 >>> dic= {'k1':'jason','k2':'Tony','k3':'JY'} 2 >>> v = dic.pop('k2') # 删除指定的key对应的键值对,并返回值 3 >>> dic 4 {'k1': 'jason', 'kk2': 'JY'} 5 >>> v 6 'Tony'
3.popitem()
1 >>> dic= {'k1':'jason','k2':'Tony','k3':'JY'} 2 >>> item = dic.popitem() # 随机删除一组键值对,并将删除的键值放到元组内返回 3 >>> dic 4 {'k3': 'JY', 'k2': 'Tony'} 5 >>> item 6 ('k1', 'jason')
4.update()
1 # 用新字典更新旧字典,有则修改,无则添加 2 >>> dic= {'k1':'jason','k2':'Tony','k3':'JY'} 3 >>> dic.update({'k1':'JN','k4':'xxx'}) 4 >>> dic 5 {'k1': 'JN', 'k3': 'JY', 'k2': 'Tony', 'k4': 'xxx'}
5.fromkeys()
1 >>> dic = dict.fromkeys(['k1','k2','k3'],[]) 2 >>> dic 3 {'k1': [], 'k2': [], 'k3': []}
6.setdefault()
1 # key不存在则新增键值对,并将新增的value返回 2 >>> dic={'k1':111,'k2':222} 3 >>> res=dic.setdefault('k3',333) 4 >>> res 5 333 6 >>> dic # 字典中新增了键值对 7 {'k1': 111, 'k3': 333, 'k2': 222} 8 9 # key存在则不做任何修改,并返回已存在key对应的value值 10 >>> dic={'k1':111,'k2':222} 11 >>> res=dic.setdefault('k1',666) 12 >>> res 13 111 14 >>> dic # 字典不变 15 {'k1': 111, 'k2': 222}
七.集合
一)作用:集合 list tuple dict一样都可以存放多个值,但实际和主要用于:去重 关系运算
二)定义:在{}内用逗号分隔开多个元素,集合具备以下三个特点:
1:每个元素必须是不可变类型
2:集合内没有重复的元素
3:集合内元素无序
1 s = {1,2,3,4} # 本质 s = set({1,2,3,4})
# 注意1:列表类型是索引对应值,字典是key对应值,均可以取得单个指定的值,而集合类型既没有索引也没有key与值对应,所以无法取得单个的值,而且对于集合来说,主要用于去重与关系元素,根本没有取出单个指定值这种需求。
# 注意2:{}既可以用于定义dict,也可以用于定义集合,但是字典内的元素必须是key:value的格式,现在我们想定义一个空字典和空集合,该如何准确去定义两者?
d = {} # 默认是空字典
s = set() # 这才是定义空集合
三)类型转换:
但凡能被for循环的遍历的数据类型(强调:遍历出的每一个值都必须为不可变类型)都可以传给set()转换成集合类型
>>> s = set([1,2,3,4]) >>> s1 = set((1,2,3,4)) >>> s2 = set({'name':'jason',}) >>> s3 = set('egon') >>> s,s1,s2,s3 {1, 2, 3, 4} {1, 2, 3, 4} {'name'} {'e', 'o', 'g', 'n'}
四)使用
1)关系运算