-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPython Data Structure Sec.1.py
More file actions
215 lines (184 loc) · 12 KB
/
Copy pathPython Data Structure Sec.1.py
File metadata and controls
215 lines (184 loc) · 12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
#使用方括号创建列表时,只需要把所需的列表元素用逗号隔开,并用方括号将其括起来即可。
#当使用方括号而不传入任何元素时,创建的是一个空列表。列表中允许包含任意类型的对象,
# 其中也包括列表对象,即可以创建嵌套列表。使用方括号创建列表的示例如下。
# 创建包含混合数据类型的嵌套列表
"""
mylist=[1,2,0,['three','four',5],6.5,True]
print(mylist)
empty_list=[]
print(empty_list)
print(len(empty_list))
print(len(mylist))
mylist=[[1,2,3],[4,5,6],[7,8,9]]#创建二维列表
print(mylist)
#在Python中,list函数的作用实质上是将传入的数据结构对象转换成列表对象。
#使用list函数时,可以用圆括号或方括号把元素按顺序括起来,元素之间以逗号隔开,
# 并传入函数中。如果不传入任何对象到list函数中,那么将会创建一个空列表。使用list函数创建列表的示例如下。
mylist=list((1,2,0,['three','four',5],6.5,True))
print(mylist)
print(type(mylist))
empty_list=list()
print(empty_list)
mylist2=list(['one','two','three','four',5])
print(mylist2)
print(type(mylist2))
print(list('hello world!'))
#列表的基本操作,序列类型的数据结构都可以通过索引和切片操作对元素进行提取,字符串、列表和元组都属于序列类型。
# 列表的索引从0开始、以1为步长逐渐递增,这种索引的定义方式或许与我们通常所理解的从1开始有所出入。
# 列表元素的提取方法有两种,索引访问提取和切片操作提取。其中,索引访问提取仅返回一个索引对应的元素,
# 切片操作提取会返回列表中对应的子列表。
# 为了提取列表中的某个元素,可以在列表对象后面紧接方括号并在其中指定索引。
# 列表的索引访问提取的具体格式为sequence_name[index],即列表对象[索引]。
# Python允许传入负索引来进行元素提取,可以从列表尾端提取元素。索引访问提取的示例如下。
mylist3=['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday']
print(mylist3[1])
print(mylist3[-3])
#索引错误示例
print(mylist3[6])
print(mylist3[-7])
#对列表进行处理时可能需要提取列表中的子列表,需要通过列表的切片操作来完成。
# 在进行切片操作时,只需要传入要提取子列表的起始元素索引、终止元素索引,以及步长值,
# 此时得到的列表切片将包含从起始元素开始,以步长值为间隔,到终止元素之前的所有元素。
# 切片操作格式为sequence_name[start:end:step],即列表对象[起始元素索引:终止元素索引:步长值]。
#在切片操作格式当中,默认步长值为1,此时格式中的第2个冒号可以省略。
# 当步长值为正数时,表示切片从左往右提取元素,一般需要起始元素位置小于终止元素位置;
# 若步长值为负数,则表示从右往左提取,此时起始元素位置应该大于终止元素位置。切片操作提取的示例如下。
# 步长值为正数时的切片操作
mylist4 = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
print(mylist4[2:7]) # 提取第3~7个元素
print(mylist4[1:9:2]) # 提取第2~9个元素之间的元素,步长值为2
# 步长值为负数时的切片操作
print(mylist4[-2:-8:-2]) # 提取倒数第2个至倒数第8个元素之间的元素,步长值为2
print(mylist4[1:4:0]) # 步长值为0时将会报错
#可以省略格式中的起始元素索引和终止元素索引,但第1个冒号必须存在。
# 若只省略起始元素索引,切片操作会默认使用起始元素或终止元素的索引,即从列表开头或结尾开始提取元素;
# 若只省略终止元素索引,切片操作会从起始元素索引开始,按提取方向搜索到列表一端的最后一个元素,
# 这时切片操作会包含该端最后一个元素;若两者同时省略,切片操作就会从某端开始对全体元素进行搜索提取。
#使用切片操作sequence_name[::-1]可以将列表反转。其实这里就是从列表右端开始,
# 逐个提取元素,直至提取完所有元素。应用示例如下。
mylist4 = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
# 省略起始元素索引
print(mylist4[:-7:-2]) # 提取从结尾向左到倒数第7个元素间的元素,步长值为2
# 省略终止元素索引
print(mylist4[6:]) # 提取从第7个元素到列表右端最后一个元素之间的所有元素
# 同时省略起始元素索引和终止元素索引
print(mylist4[::-2]) # 提取从结尾到左端第1个元素之间的元素,步长值为2
# 提取从结尾到左端第1个元素之间的全体元素,步长值为1,即将列表反转
print(mylist4[::-1])
#切片操作无须担心传入的索引超出列表索引范围。若传入的索引小于列表第1个元素的负索引,
# 切片操作会将其当作0;如果传入的索引大于列表最后一个元素的正索引,切片操作会将其当作1。
# 当切片操作从起始元素索引根据提取方向无法到达终止元素索引时,Python将返回一个空列表。具体应用示例如下。
#提取从第4个元素到列表右端最后一个元素之间的元素,步长值为2
print(mylist4[3:100:2])
# 提取从倒数第5个元素到列表左端第1个元素之间的全体元素,步长值为1
print(mylist4[-5:-20:-1])
print(mylist4[6:2]) # 提取从第7个元素向右到第3个元素之间的所有元素
#列表常用方法和函数
#使用append()方法传入需要增添到列表对象的一个元素,该元素会被追加到列表尾部,
# 如下。注意,append()方法一次只能追加一个元素。实例如下
month = ['January', 'February', 'March', 'April', 'May', 'June']
month.append('July') # 使用append()方法向列表尾部追加元素
print(month) # 查看列表内容
month = ['January', 'February', 'March', 'April', 'May', 'June']
month.append('July') # 使用append()方法向列表尾部追加元素
print(month) # 查看列表内容
#使用extend()方法能够将另一个列表增添到指定列表末尾,相当于将两个列表拼接。类似于字符串拼接,
# 两个列表对象也可以通过加号进行拼接,使用extend()方法的效果与使用自增运算(+=)的相同,如下。
# 创建一个列表对象month的副本,用于对比extend()方法与自增运算的效果
month=['January', 'February', 'March', 'April', 'May', 'June', 'July']
month_copy = month.copy()
print(month_copy)
others = ['August', 'September', 'November', 'December']
month.extend(others) # 使用extend()方法将两个列表进行拼接
print(month)
month_copy += others # 对副本进行自增运算
print(month_copy)
#类似于append()方法,使用insert()方法也能够向列表中增添一个元素。
# 不同的是,insert()方法可以指定增添位置,类似于在列表某个位置插入一个元素。
#只要向insert()方法中传入插入位置和要插入的元素,即可在列表的相应位置增添指定的元素。
# 若插入位置超出列表尾端,则元素会被置于列表最后。使用insert()方法插入元素示例如下通过加号进行拼接,
# 使用extend()方法的效果与使用自增运算(+=)的相同,如下。
month.insert(9, 'October') # 在列表第10个位置上插入元素
print(month)
month.insert(20, 'None') # 插入位置超出列表尾端
print(month)
#删除列表元素
#(1)del语句在Python中,使用del语句可以将列表元素删除。实质上,del语句是赋值语句(=)的逆过程。
# 如果将赋值语句看作“向对象贴变量名标签”,那么del语句就是“将对象上的标签撕下来”,即将一个对象与它的变量名分离。
# 使用del语句可以将从列表中提取出的元素删除,如下。
month_copy = month.copy() # 创建一个列表对象month的副本
del month_copy[-1] # 删除副本中的最后一个元素
print(month_copy)
#(2)pop()方法利用元素位置可以对元素进行删除操作。将元素索引传入pop()方法中,
# 将会获取对应元素,并将其在列表中删除。若不指定元素位置,pop()方法将默认使用索引-1。
# 使用pop()方法删除元素的示例如下。
month_copy = month.copy() # 创建一个列表对象month的副本
print(month_copy.pop(3)) # 获取并删除第4个元素
del_element = month_copy.pop() # 将最后一个元素赋值给一个变量并在副本中将其删除
print(del_element)
print(month_copy) # 查看副本
#(3)remove()方法除了利用元素位置进行元素删除外,还可以对指定元素进行删除。
# 将指定元素传入remove()方法,则列表中第一次出现的该元素将会被删除,如下。
month.remove('None') # 删除列表中的元素'None'
print(month)
#3.修改列表元素
# 由于列表是可变的,修改列表元素最简单的方法是提取相应元素并进行赋值操作,如下。
month[0] = 'Jan' # 将第1个元素改为缩写形式
print(month)
#对于可变数据类型的数据结构,直接在对象上进行元素的增添、删除、修改、查询等操作,
# 处理结果将直接影响对象本身,如下。
a = [1, 2, 3, 4] # 变量a指向列表对象[1, 2, 3, 4]
b = a # 变量b也指向列表对象[1, 2, 3, 4]
a.append(5) # 列表尾端追加元素5
print(a)
print(b)
#如果不希望操作直接作用于列表对象本身,那么可以使用列表的copy()方法创建一个完全一样的副本。
# 这样列表对象本身就不会发生变化。除了copy()方法外,使用切片操作和list函数也能达到同样的效果,如下。
a = [10, 20, 30, 40, 50]
b = a.copy() # 使用copy()方法创建副本
c = a[:] # 使用切片操作创建副本
d = list(a) # 使用list函数创建副本
print(id(a), id(b), id(c), id(d)) # 查看各变量对象的id
b[2] = 'three' # 修改副本第3个元素
print(b)
print(a) # 原列表并没有发生变化
print(c)
print(d)
#4.查询列表元素
# 利用列表方法index()可查询指定元素在列表中第1次出现的位置索引。
#若列表不包含指定元素,则会出现错误提示,可以使用Python中的in关键字判断是否存在指定元素,
# 具体格式为“元素in列表对象”。若元素至少在列表中出现过一次,则返回True,否则返回False。
# index()方法和in关键字的应用示例如下。
letter = ['A', 'B', 'A', 'C', 'B', 'B', 'C', 'A']
print(letter.index('C')) # 获取元素'C'在列表中第1次出现的位置索引
# 使用in关键字判断列表是否包含元素'A'
print('A' in letter)
#5.其他常用操作
#count()方法:记录某个元素在列表中出现的次数
#sort()方法:对列表中的元素进行排序,默认安升序排序,可以通过设置参数reverse=True进行降序排序.
# 结果会改变原列表内容
#sorted函数:与list.sort()方法的作用一样,但不改变原列表内容
#reverse()方法:反转列表中的各元素
#len函数:获取列表长度,即列表中元素的个数
# + :将两个列表拼接为一个列表
# * :重复拼接同一个列表多次
# 使用count()方法进行元素计数
letter = ['B', 'A', 'C', 'D', 'A', 'C', 'D', 'A']
print(letter.count('A')) # 获取元素'A'在列表中出现的次数
# 使用sorted()函数和sort()方法对列表进行排序
print(sorted(letter)) # 使用sorted函数对列表进行排序,不改变原列表内容
print(letter)
letter.sort() # 使用sort()方法对列表进行排序,改变原列表内容
print(letter)
letter.sort(reverse=True) # 对列表进行降序排列
print(letter)
# 使用reverse()方法反转列表
season = ['spring', 'summer', 'autumn', 'winter']
season.reverse() # 反转列表
print(season)
# 使用len函数获取列表长度
print(len(season))
# 使用加号拼接两个列表
print([1, 2, 3] + [4, 5, 6])
# 使用乘号重复拼接列表
print([10,20,30,40]*3)"""