-
Notifications
You must be signed in to change notification settings - Fork 0
/
list.py
180 lines (145 loc) · 6.59 KB
/
list.py
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
#!/usr/bin/env python3
# encoding: utf-8
# @author: hoojo
# @email: hoojo_@126.com
# @github: https://github.com/hooj0
# @create date: 2017-10-25 23:05:35
# @copyright by hoojo@2018
# @changelog Added python3 `data struct->list` example
'''
list 有序集合/有序列表
example:
names = [ 'jack', 'jason', 'tom' ]
特点:
1、有序
2、支持随意添加、删除
3、速度比dict数据字典、set要慢
API:
1、len(list) list长度,元素数量
2、list[+-index] 取值
3、 list.append(el) 添加新元素
4、list.insert(index, el) 在list的index插入元素,如果存在就替换;当索引比长度还大时,元素会添加到末尾
5、list.pop() 删除末尾的元素
6、list.pop(index) 删除index位置的元素
7、list + list2 两个list进行拼接
8、list[start:end] 对list进行分割切片
9、el in list, el not in 判断el是否在list中出现
10、list.sort(key=None, reverse=True) 对list进行排序
11、sorted(list) 对list进行排序
12、del list[index] 删除指定index位置的元素
13、list[index] = 'last element' 对已知存在的元素进行赋值,index必须是存在元素的下标
14、list[start:end] = [] 删除某个区间的元素
15、list[start:end] = [ el, el2, el...] 将某个区间的元素进行覆盖(start:end存在就覆盖)或插入
16、list.clear() list[:] = [] 清空元素
17、del list_ref 删除指定list对象
18、list * Number 将list复制指定次数Number
19、list.copy() 浅复制
20、list.count(el) 判断el元素出现的次数
21、max(list) 找到最大的元素
22、min(list) 找到最小的元素
23、list.index(el, start, end) 判断el元素首次出现的下标索引,start/end可不传,不包含end位置
24、list.extend(iter) 继承某个集合,合并一个新的list
25、list.remove(el) 删除一个存在的元素,每次仅删除一个
26、list.reverse() 倒序,按照默认插入先后顺序倒序
'''
# 创建一个list
names = [ 'jack', 'jason', 'lily', 'tom', 'coco' ]
print('user names: ', names) # user names: ['jack', 'jason', 'lily', 'tom', 'coco']
# len() 获取list长度
print('user count: ', len(names)) # user count: 5
# 通过索引、下标 访问;索引从0开始
print('first user: ', names[0]) # first user: jack
print('three user: ', names[2]) # three user: lily
# 当索引越界超出长度就会出现错误
# print('unknow user: ', names[10])
# -1 获取最后一个元素
print('last user: ', names[-1]) # last user: coco
print('last 2 user: ', names[-2]) # last 2 user: tom
# append 添加新的元素
names.append('charry')
print('names: ', names) # names: ['jack', 'jason', 'lily', 'tom', 'coco', 'charry']
# insert 插入元素到指定索引位置
names.insert(2, 'blom')
print('names:', names) # names: ['jack', 'jason', 'blom', 'lily', 'tom', 'coco', 'charry']
# 当索引比长度还大时,元素会添加到末尾
names.insert(12, 'blom2')
names.append('charry2')
print('names:', names) # names: ['jack', 'jason', 'blom', 'lily', 'tom', 'coco', 'charry', 'blom2', 'charry2']
# 对已知存在的元素进行赋值
names[len(names) - 1] = 'last element'
print('names:', names) # names: ['jack', 'jason', 'blom', 'lily', 'tom', 'coco', 'charry', 'blom2', 'last element']
# pop 删除末尾的元素
names.pop()
# 删除指定索引位置的元素 pop(index)
names.pop(3)
print('names: ', names) # names: ['jack', 'jason', 'blom', 'tom', 'coco', 'charry', 'blom2']
# 删除指定索引位置的元素
del names[0]
print('del names[0]', names) # del names[0] ['jason', 'blom', 'tom', 'coco', 'charry', 'blom2']
# 不同类型的元素的list
objects = [ 1, 'user', [ '5', '6'] ]
print('objects:', objects) # objects: [1, 'user', ['5', '6']]
print('objects[0]:', objects[0])
print('objects[-1][1]:', objects[-1][1]) # objects[-1][1]: 6
# list 进行叠加,会出现并集结果
list1 = [ 1, 3, 5 ]
list2 = list1 + [ 2, 4, 8 ]
print('list2: ', list2) # list2: [1, 3, 5, 2, 4, 8]
# list[index-start, index-end] 对列表进行分片处理,同字符串分片一样,不包含截止下标的元素
list = [ 0, 1, 2, 3, 4, 5 ]
print('list[2:5]:', list[2:5]) # list[2:5]: [2, 3, 4]
print('list[2:-1]:', list[2:-1])# list[2:-1]: [2, 3, 4]
print('list[2:-1]:', list[2:-2])# list[2:-1]: [2, 3]
# 从3开始,到最后
print('list[2:-1]:', list[3:]) # list[2:-1]: [3, 4, 5]
# 输出全部元素
print('list[:]:', list[:]) # list[:]: [0, 1, 2, 3, 4, 5]
# 删除某个区间的元素
print('remove list before:', list) # remove list before: [0, 1, 2, 3, 4, 5]
list[1:2] = []
print('remove list after:', list) # remove list after: [0, 2, 3, 4, 5]
# 在指定区间插入值,如果区间有元素将被覆盖
list[1:3] = [ 'a', 'b', 'c', 'd' ]
print('list[1:3] = [...]:', list) # list[1:3] = [...]: [0, 'a', 'b', 'c', 'd', 4, 5]
# 判断list中是否存在某个元素
print('1 in list ->', 1 in list) # 1 in list -> False
print('3 not in list ->', 3 not in list) # 3 not in list -> True
# list 进行排序
list = [5, 3, 6, 2, 1, 9, 0]
list.sort()
print('list sort:', list) # list sort: [0, 1, 2, 3, 5, 6, 9]
# 倒序
list.sort(key=None, reverse=True)
print('list sort reverse:', list) # list sort reverse: [9, 6, 5, 3, 2, 1, 0]
list = sorted([5, 3, 6, 2, 1, 9, 0])
print('list sort:', list) # list sort: [0, 1, 2, 3, 5, 6, 9]
# 清空元素
list.clear()
list[:] = []
print("------------------------------------------")
# 删除对象list
del list
list = [5, 3, 6, 2, 1, 9, 0, 2, 3, 1]
# 复制
print('list * 3:', list * 3) #list * 3: [5, 3, 6, 2, 1, 9, 0, 2, 3, 1, 5, 3, 6, 2, 1, 9, 0, 2, 3, 1, 5, 3, 6, 2, 1, 9, 0, 2, 3, 1]
L = list.copy()
L.append('5')
print('list.copy', L) # list.copy [5, 3, 6, 2, 1, 9, 0, 2, 3, 1, '5']
print(list) # [5, 3, 6, 2, 1, 9, 0, 2, 3, 1]
# 元素出现次数
print('count(el):', list.count(2))
# 元素首次出现的下标
print('index(el):', list.index(2))
print('index(el):', list.index(2, 5))
print('index(el):', list.index(1, 8, 11))
# 最大元素和最小元素
print('max:', max(list))
print('min:', min(list))
# 继承某个list集合,相当于两个集合进行拼接
list.extend(L)
print('list.extend', list) # list.extend [5, 3, 6, 2, 1, 9, 0, 2, 3, 1, 5, 3, 6, 2, 1, 9, 0, 2, 3, 1, '5']
list.remove(0)
#list.remove('a') # ValueError: list.remove(x): x not in list
print('list remove:', list) # list remove: [5, 3, 6, 2, 1, 9, 2, 3, 1, 5, 3, 6, 2, 1, 9, 0, 2, 3, 1, '5']
list.reverse()
print('reverse: ', list) # reverse: ['5', 1, 3, 2, 0, 9, 1, 2, 6, 3, 5, 1, 3, 2, 9, 1, 2, 6, 3, 5]