Python数据结构(元组,列表,字典)
Python内置了 几种数据结构,元组,列表 字典
1.元组
元组可以由不同的元素组成,所有元素通过圆括号( )包含起来,并通过逗号","隔开.如变量名 = (元素1,元素2,...),如果a = 1,3,56,'abc','aoe',也默认a是元组
每个元素也可以是不同的数据类型,字符串,数字,元组,列表,字典
元组的元素不能修改,也不能删除,可以将元组整个删除,使用del 元组,如删除元组tuple使用del tuple
当元组只有一个元素时,第一个元素后面跟上逗号"," .如,tuple只有一个元素50时 ,tuple = (50,)
元组的元素以索引编号,从0开始
读取单个元素使用元组[m]的方式,m是索引编号,倒数第一个元素元组[-1]
读取多个元素使用"元组[m:n]"的方式,m和n就是索引的序号,代表读取元组从m到n的元素,但不包括n这个元素.例如:元组[1,-1]指索引从1开始到索引为-1但不包含-1的元素.
步长打印 元组[m:n:k],以间隔逗号个数为k读取元组中索引从m到n但不包含n的元素tuple = (1,2,3,4,5,6,7) print(tuple[1:6:2]) 结果:[2,4,6] k=2即间隔两个逗号
读取元组中的列表中的单个元素,使用"元组[m][n]的方式,m是元组中列表的索引,n是列表中元素的索引编号.例如:元组[2][-2]指元组中索引为2的列表中倒数第2个元素.
读取元组中列表或元组中的多个元素,使用"元组[x][m:n]"的方式,x是元组中列表/元组的索引,m:n即列表/元组中从索引为m到n但不包含n的元素.
元组的合并:tuple = tuple1+tuple2
读取结果:看最终取自哪里,是单个还是多个元素,如果单个元素,那么读取结果是该元素(可以是字符串,数字,元组,列表,字典),如果是多个元素,那么若多个元素最终取自列表,读取结果是多个元素组成的列表,若多个元素最终取自元组,那么读取结果是多个元素组成的元组
实例代码如下:
1 a = 1,3,56,'abc','aoe'
2 print(type(a))
3 print(a)
4 m = 1,
5 n = 1
6 print(type(m))
7 print(m)
8 print(type(n))
9 print(m*3)
10 print(m)
11 #运行结果
12 <class 'tuple'>
13 (1, 3, 56, 'abc', 'aoe')
14 <class 'tuple'>
15 (1,)
16 <class 'int'>
17 (1, 1, 1)
18 (1,)
1 变量名 = (元素1,元素2,...)
2 tuple = (1,2,3,[4,5,6,7,8,9],{"A":"abc","B":"789","C":"NBA"},(11,22,'monkey','pig'))
3 print(tuple[3])
4 print(tuple[3][-1])
5 print(tuple[3][1:5])
6 print(tuple[4])
7 print(tuple[4]["C"])
8 print(tuple[5])
9 print(tuple[5][1:4])
10 #运行结果如下
11 [4, 5, 6, 7, 8, 9]
12 9
13 [5, 6, 7, 8]
14 {'A': 'abc', 'B': '789', 'C': 'NBA'}
15 NBA
16 (11, 22, 'monkey', 'pig')
17 (22, 'monkey', 'pig')
1 tuple1 = (12, 34.56)
2 tuple2 = ('abc', 'xyz')
3 tuple3 = tuple1+tuple2
4 print(tuple3)
5 #运行结果
6 (12, 34.56, 'abc', 'xyz')
元组常用的方法/函数:
①排序sorted(tuple):不支持字符串,元组元素不能修改,删除.使用sorted()排序后,得到的是一个列表,但是元组本身并没有因此变化
②最大值max(tuple)
③最小值min(tuple)
④长度len(tuple)
⑤重复tuple*n
1 tuple = (12, 34.56,13,5)
2 list = sorted(tuple)
3 print(type(tuple))
4 print(tuple)
5 print(type(list))
6 print(list)
7 print(len(tuple))
8 print(max(tuple))
9 print(min(tuple))
10 #运行结果
11 <class 'tuple'>
12 (12, 34.56, 13, 5)
13 <class 'list'>
14 [5, 12, 13, 34.56]
15 4
16 34.56
17 5
1 a =(1,3,56,'abc','aoe')
2 print(a)
3 print(a*3)
4 print(a)
5 #运行结果
6 (1, 3, 56, 'abc', 'aoe')
7 (1, 3, 56, 'abc', 'aoe', 1, 3, 56, 'abc', 'aoe', 1, 3, 56, 'abc', 'aoe')
8 (1, 3, 56, 'abc', 'aoe')
1 #python数据类型之元组练习 2 L1 = (1,2,3,'A','B','C') 3 L2 = (1,2,3,4,5,6) 4 L3 = ('A',)#元组只有一个元素时需要加逗号"," 5 L4 = 'A','B','C','D','E' 6 print(L1[1])#打印元组L1中索引为1的元素 7 print(L1[2:5])#打印(截取)元组L1中索引从2到5,但不包含索引为5的元素 8 print(L1[2:])#打印(截取)元组L1中索引从2开始到结束的元素 9 print(L1[:5])#打印(截取)元组L1中索引从0开始到5,但不包含索引为5的元素 10 print(L1[-3])#打印元组L1中倒数第三个元素 11 print(L1[:-3])#打印元组L1中索引从0开始到倒数第3(不含倒数第3)的元素 12 print(L1)#打印元组L1 13 print(L1[0:])#打印元组L1 14 print(L1[:])#打印元组L1 15 print(L1[:6])#打印元组L1 16 print(L1+L2)#元组的组合 17 L5 = L1+L2#元组的拼接 18 print(L5) 19 print(L4) 20 print(L1*3)#元组的重复 21 print(len(L2))#打印元组L2的长度 22 del L2#元组的元素不可以修改,也不可以删除,可以将整个元组删除 23 #运行结果 24 2 25 (3, 'A', 'B') 26 (3, 'A', 'B', 'C') 27 (1, 2, 3, 'A', 'B') 28 A 29 (1, 2, 3) 30 (1, 2, 3, 'A', 'B', 'C') 31 (1, 2, 3, 'A', 'B', 'C') 32 (1, 2, 3, 'A', 'B', 'C') 33 (1, 2, 3, 'A', 'B', 'C') 34 (1, 2, 3, 'A', 'B', 'C', 1, 2, 3, 4, 5, 6) 35 (1, 2, 3, 'A', 'B', 'C', 1, 2, 3, 4, 5, 6) 36 ('A', 'B', 'C', 'D', 'E') 37 (1, 2, 3, 'A', 'B', 'C', 1, 2, 3, 'A', 'B', 'C', 1, 2, 3, 'A', 'B', 'C') 38 6
2.列表
列表和元组很相似,主要差别在于列表的元素可以增加,修改和删除,而元组是不行滴!
列表的元素由[ ]括起来,元素间用逗号","隔开.
列表中的元素可以是数字,字符串,列表,元组,列表,字典
列表的每个元素也可以是不同的数据类型,字符串,数字,元组,列表,字典
列表的元素以索引编号,从0开始
读取单个列使用"列表[m]"的方式,m是索引编号,倒数第一个元素"列表[-1]"
读取多个元素使用"列表[m:n]"的方式,m和n就是索引的序号,代表读取列表从m到n的元素,但不包括n这个元素.例如:列表[1,-1]指索引从1开始到索引为-1但不包含-1的元素.
步长打印 列表[m:n:k],以间隔逗号个数为k读取列表中索引从m到n但不包含n的元素list = [1,2,3,4,5,6,7] print(list[1:6:2]) 结果:[2,4,6] k=2即间隔两个逗号
读取列表中的元组或列表中的单个元素,使用"列表[m][n]的方式,m是列表中列表/元组的索引,n是列表/元组中元素的索引编号.例如:列表[2][-2]指列表中索引为2的列表/元组中倒数第2个元素.
读取列表中中列表或元组中的多个元素.使用"列表[x][m:n]"的方式,x是列表中列表/元组的索引,m:n即列表/元组中从索引为m到n但不包含n的元素.
列表的合并:list1 = list1+list2(列表可以修改) ,或者list1.extend(list2)
读取结果:看最终取自哪里,是单个还是多个元素,如果单个元素,那么读取结果是该元素(可以是字符串,数字,元组,列表,字典),如果是多个元素,那么若多个元素最终取自列表,读取结果是多个元素组成的列表,若多个元素最终取自元组,那么读取结果是多个元素组成的元组
1 变量名 = (元素1,元素2,...)
2 list = [1,2,3,[4,5,6,7,8,9],{"A":"abc","B":"789","C":"NBA"},(11,22,'monkey','pig')]
3 print(list[3])
4 print(list[3][-1])
5 print(list[3][1:5])
6 print(list[4])
7 print(list[4]["C"])
8 print(list[5])
9 print(list[5][1:4])
10 #运行结果
11 [4, 5, 6, 7, 8, 9]
12 9
13 [5, 6, 7, 8]
14 {'A': 'abc', 'B': '789', 'C': 'NBA'}
15 NBA
16 (11, 22, 'monkey', 'pig')
17 (22, 'monkey', 'pig')
列表常用方法/函数
1.增删改的相关语法:
①增加元素list.append(元素) :调用列表的添加方法加入元素,并将元素添加到列表最后.其中增加的元素可以是任何数据类型
②插入元素list.insert(索引位置,元素):调用列表的插入方法加入元素到指定的索引位置,之后的元素索引位置依次向后瞬移
③移除元素list.remove(元素):调用列表的移除方法删除元素,之后的元素索引位置依次向前瞬移
④修改元素list[n]=元素 将列表中索引为n的元素赋值新元素
⑤删除元素del list[n] 删除列表中的元素.删除整个列表:del list
⑥列表的合并:
1.list1.extend(list2) 将list2中的元素扩展到list1中,并将list2的元素放到list1元素的后面
2.list1 = list1+list2 直接通过列表相加的方法并重新赋值到列表1中
实例代码如下:
1 a = [1,2,3,'a','abc','dnf']
2 a.append(235)
3 print(a)
4 a.remove(235)
5 print(a)
6 a.insert(2,4)
7 print(a)
8 a.insert(6,'xyz')
9 print(a)
10 a.insert(8,'888')
11 print(a)
12 a[-1] = '999'
13 print(a)
14 print(a[3:7])
15 print(a[0:-1])
16 #运行结果:
17 [1, 2, 3, 'a', 'abc', 'dnf', 235]
18 [1, 2, 3, 'a', 'abc', 'dnf']
19 [1, 2, 4, 3, 'a', 'abc', 'dnf']
20 [1, 2, 4, 3, 'a', 'abc', 'xyz', 'dnf']
21 [1, 2, 4, 3, 'a', 'abc', 'xyz', 'dnf', '888']
22 [1, 2, 4, 3, 'a', 'abc', 'xyz', 'dnf', '999']
23 [3, 'a', 'abc', 'xyz']
24 [1, 2, 4, 3, 'a', 'abc', 'xyz', 'dnf']
1 1 a = [1,2,3,('a','b','c')]
2 2 b = [4,5,6,['x','y','z']]
3 3 c = [444,555,666,(7,8,9)]
4 4 a.extend(b)
5 5 print(a)
6 6 c = b+c
7 7 print(c)
8 8
9 9 #运行结果
10 10 [1, 2, 3, ('a', 'b', 'c'), 4, 5, 6, ['x', 'y', 'z']]
11 11 [4, 5, 6, ['x', 'y', 'z'], 444, 555, 666, (7, 8, 9)]
1 #python数据类型之列表练习
2 L1 = [1,2,3,'A','B','C']
3 L2 = [1,2,3,4,5,6]
4 print(L1[1])#打印列表L1中索引为1的元素
5 print(L1[2:5])#打印(截取)列表L1中索引从2到5,但不包含索引为5的元素
6 print(L1[2:])#打印(截取)列表L1中索引从2开始到结束的元素
7 print(L1[:5])#打印(截取)列表L1中索引从0开始到5,但不包含索引为5的元素
8 print(L1[-3])#打印列表L1中倒数第三个元素
9 print(L1[:-3])#打印列表L1中索引从0开始到倒数第3(不含倒数第3)的元素
10 print(L1)#打印列表L1
11 print(L1[0:])#打印列表L1
12 print(L1[:])#打印列表L1
13 print(L1[:6])#打印列表L1
14 print(L1+L2)#列表的组合
15 print(L1*3)#列表的重复
16 print(len(L2))#打印列表的长度
17 L2[0] = 'AOE'#列表的值可以修改,将所索引为0的元素更改为'AOE'
18 del L2[5]#列表的元素可以删除,将索引为5的元素删除
19 print(L2)
20 #运行结果
21 2
22 [3, 'A', 'B']
23 [3, 'A', 'B', 'C']
24 [1, 2, 3, 'A', 'B']
25 A
26 [1, 2, 3]
27 [1, 2, 3, 'A', 'B', 'C']
28 [1, 2, 3, 'A', 'B', 'C']
29 [1, 2, 3, 'A', 'B', 'C']
30 [1, 2, 3, 'A', 'B', 'C']
31 [1, 2, 3, 'A', 'B', 'C', 1, 2, 3, 4, 5, 6]
32 [1, 2, 3, 'A', 'B', 'C', 1, 2, 3, 'A', 'B', 'C', 1, 2, 3, 'A', 'B', 'C']
33 6
34 ['AOE', 2, 3, 4, 5]
3.字典
字典由一系列"键":"值"组成,每一组可以理解为一个元素,并通过{ }包含起来,创建字典语法格式:dictionary = {键1:值1,键2:值2,键3:值3,.......}
字典中的键是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一,值可以取任何数据类型。
键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行,因为列表是可变的嘛!
字典内的元素没有顺序,所以不能通过下标引用,必须通过键来访问
访问单个元素:字典["key"]
访问全部元素:字典
访问字典中没有的键会输出错误
字典的拼接:dict1.update(dict2),将字典dict2合并到字典dict1之中,如果dict2中存在与dict1中相同的键,那么该键会被替换成dict2的值.
1 m = {"a":1,"b":2,"c":3,"d":"nba"}
2 print(m["a"])
3 print(m["d"])
4 #运行结果
5 1
6 nba
字典的增删改:
字典的增加和修改的语法一样,都是通过给某个键进行对应的赋值,当键对应的值存在时将原值替换为新的赋值,当键不存在时创建一个新的键值对.
1 n = {"a":1,"b":2}
2 n["c"] = 3
3 n["a"] = 'x'
4 print(n)
5 #运行结果
6 {'a': 'x', 'b': 2, 'c': 3}
字典的拼接:dict1.update(dict2),将字典dict2合并到字典dict1之中,如果dict2中存在与dict1中相同的键,那么该键会被替换成dict2的值.
与列表的合并区别在于,列表可以合并重复的数据并且不会被替代,而字典中如果有重复的键,就会被新的键对应的值所取代
1 # dictionary = {键1:值1,键2:值2,键3:值3,.......}
2 m = {"a":1,"b":2,"c":3,"d":"nba"}
3 m["x"] = 2019
4 m['y'] = 'abc'
5 print(m["x"])
6 print(m["y"])
7 m["a"] = 123
8 m["b"] = "HK666"
9 print(m)
10 n = {"a":1,"b":2}
11 y = {"c":3,"d":"nba"}
12 n.update(y)
13 print(n)
14 z = {"a":1,"b":2}
15 del(z["a"])
16 print(z)
17 x = {"a":1,"b":2}
18 y = {"a":1,"b":2}
19 x.update(y)
20 print(x)
21 #运行结果:
22 2019
23 abc
24 {'a': 123, 'b': 'HK666', 'c': 3, 'd': 'nba', 'x': 2019, 'y': 'abc'}
25 {'a': 1, 'b': 2, 'c': 3, 'd': 'nba'}
26 {'b': 2}
27 {'a': 1, 'b': 2}
字典常用的方法/函数
①取出所有的键dict.keys()
②取出所有的值dict.values()
③取出所有的键值对dict.items()
④清空字典dict.clear()
⑤删除:只能删除单个键值或者整个字典
删除单个键值 del dict['key1']
删除整个字典del dict
1 dict_aoe = {'key1':'value1','key2':'value2','key3':'value3','key4':'value4'}
2 print(dict_aoe)
3 print(dict_aoe.keys())
4 print(dict_aoe.values())
5 print(dict_aoe.clear())
6 print(dict_aoe)
7 dict1 = {'key1':'value1','key2':'value2','key3':'value3','key4':'value4'}
8 del dict1['key1']
9 print(dict1)
10 del dict1
11 print(dict1)
12 #运行结果
13 {'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'key4': 'value4'}
14 dict_keys(['key1', 'key2', 'key3', 'key4'])
15 dict_values(['value1', 'value2', 'value3', 'value4'])
16 None
17 {}
18 {'key2': 'value2', 'key3': 'value3', 'key4': 'value4'}
19 NameError: name 'dict1' is not defined
====================================================
注意:由于列表和字典的可变性,对其执行相关操作(增加,删除,修改))后,列表已经发生变化
====================================================