二、基本数据结构
2.1 列表
2.1.1 列表的定义
对于python列表相当于C语言中的数组,从形式上看,列表会将所有元素都放在一对中括号[ ]里面,相邻元素之间用逗号","分隔。经常用 list 代指列表,这是因为列表的数据类型就是 list。
从内容上看,列表可以存储整数、小数、字符串、列表、元组等任何类型的数据,并且同一个列表中元素的类型也可以不同。
注意,在使用列表时,虽然可以将不同类型的数据放入到同一个列表中,但通常情况下不这么做,同一列表中只放入同一类型的数据,这样可以提高程序的可读性。
(参考:http://c.biancheng.net/view/4328.html/)
2.1.2 列表类的基本信息
# 获取print函数的帮助内容
print(help(list))
列表的相关方法思维导图如下:
2.2. 列表常用列表函数及方法
2.2.1 len()方法
# 1、len函数
list2 = ['你好', 'good', 'www.baidu.com', 23, 200.00, [1, 2, 3], {'name': '张三'}]
print(len(list2)) # 7
2.2.2 append()方法
append(self, object, /) 函数, Append object to the end of the list.(将对象追加到列表的末尾)
# 2、append(self, object, /) 函数, Append object to the end of the list.(将对象追加到列表的末尾)
list2 = ['你好', 'good', 'www.baidu.com', 23, 200.00, [1, 2, 3], {'name': '张三'}]
list2.append("hello world!")
print(list2)
2.2.3 copy()方法
copy(self, /) Return a shallow copy of the list.(返回列表的副本)
list2 = ['你好', 'good', 'www.baidu.com', 23, 200.00, [1, 2, 3], {'name': '张三'}]
list3 = list2.copy()
for i in range(len(list3)): # 使用切片的方式输出
print(list3[i], end=";")
"""
你好;good;www.baidu.com;23;200.0;[1, 2, 3];{'name': '张三'};
"""
2.2.4 count()方法
count(self, value, /),Return number of occurrences of value.(返回值的出现次数。)
# count(self, value, /),Return number of occurrences of value.(返回值的出现次数。)
l1 = [1, 2, 2, 3, 3, 4,5,23, 2, 2,]
count = l1.count(2) # 数字2在列表中出现的次数
print(count) # 4
2.2.5 extend()方法
extend(self, iterable, /),Extend list by appending elements from the iterable.(通过追加元素来扩展list)
# extend(self, iterable, /),Extend list by appending elements from the iterable.(通过追加元素来扩展list)
list2 = ['你好', 'good', 'www.baidu.com', 23, 200.00, [1, 2, 3], {'name': '张三'}]
l2 = ['extend', 1, 2, 3]
list2.extend(l2)
print(list2) # ['你好', 'good', 'www.baidu.com', 23, 200.0, [1, 2, 3], {'name': '张三'}, 'extend', 1, 2, 3]
2.2.6 index()方法
index(self, value, start=0, stop=9223372036854775807, /), Return first index of value. Raises ValueError if the value is not present.(返回值的第一个索引。如果值不存在,则引发ValueError。)
list2 = ['你好', 'good', 'www.baidu.com', 23, 200.00, [1, 2, 3], {'name': '张三'}]
print(list2.index('www.baidu.com'))
2.2.7 insert()方法
按照索引位置向列表中插入元素
# insert()函数
list2 = ['你好', 'good', 'www.baidu.com', 23, 200.00, [1, 2, 3], {'name': '张三'}]
l2 = [11, 22, 33]
list2.insert(3, l2)
print(list2) # ['你好', 'good', 'www.baidu.com', [11, 22, 33], 23, 200.0, [1, 2, 3], {'name': '张三'}]
2.2.8 remove()方法
删除列表中的某个元素
# remove()函数
list2 = ['你好', 'good', 'www.baidu.com', 23, 200.00, [1, 2, 3], {'name': '张三'}]
list2.remove(23) # ['你好', 'good', 'www.baidu.com', 200.0, [1, 2, 3], {'name': '张三'}]
print(list2)
2.2.9 reverse()方法
对列表内的元素进行逆向排序
# reverse()函数
list2 = ['你好', 'good', 'www.baidu.com', 23, 200.00, [1, 2, 3], {'name': '张三'}]
list2.reverse()
print(list2) # [{'name': '张三'}, [1, 2, 3], 200.0, 23, 'www.baidu.com', 'good', '你好']
2.2.10 sort()方法
对列表内的元素进行正向排序
# sort()函数
list4 = [3, 4, 67,2,5678,34,2132]
list5 = [32, 43, 67,2,78,34,22]
list4.sort()
list5.sort(reverse=True)
print(list4) # [2, 3, 4, 34, 67, 2132, 5678]
print(list5) # [78, 67, 43, 34, 32, 22, 2]
2.2.10 pop()方法
删除最后一个元素或者按照某个索引删除
# pop()函数 出站对应索引位置的数据
list2 = ['你好', 'good', 'www.baidu.com', 23, 200.00, [1, 2, 3], {'name': '张三'}]
list2.pop() # 删除最后一个元素
print(list2) # ['你好', 'good', 'www.baidu.com', 23, 200.0, [1, 2, 3]]
list2.pop(3) # 删除指定索引的元素
print(list2) # ['你好', 'good', 'www.baidu.com', 200.0, [1, 2, 3]]
list2 = ['你好', 'good', 'www.baidu.com', 23, 200.00, [1, 2, 3], {'name': '张三'}]
list2.pop(-3)
print(list2) # ['你好', 'good', 'www.baidu.com', 23, [1, 2, 3], {'name': '张三'}]
2.2.11 clear()方法
清楚列表中的所有元素
# clear()函数 清楚列表内所有数据
list2 = ['你好', 'good', 'www.baidu.com', 23, 200.00, [1, 2, 3], {'name': '张三'}]
list2.clear()
print(list2) # []
2.2.12 列表的一些内部函数
列表的一些内部函数,Len,max,min,list()强制转换
l5 = [12, 23, 32, 2, 78 ]
t = (1, 2, 3, 4)
print(len(l5)) # 列表长度: 5
print(max(l5)) # 列表中元素最大值:78
print(min(l5)) # 列表中元素最小值:2
print(list(t)) # 将元祖强制转换:
2.2.13列表的一些操作方法
列表长度,拼接,截取,重复,判断是否存在某个元素,迭代等
list2 = ['你好', 'good', 'www.baidu.com', 23, 200.00, [1, 2, 3], {'name': '张三'}]
print(len(list2)) # 列表长度: 7
print(list2+[1,2,3,4,5]) # 列表拼接 ['你好', 'good', 'www.baidu.com', 23, 200.0, [1, 2, 3], {'name': '张三'}, 1, 2, 3, 4, 5]
print(['hi'] * 4) # 重复列表 ['hi', 'hi', 'hi', 'hi']
print(23 in list2) # 判断是否包含, True
# 列表迭代
for i in list2:
print(i,end=";") # 你好;good;www.baidu.com;23;200.0;[1, 2, 3];{'name': '张三'};
print() # www.baidu.com
#列表截取
print(list2[2]) # [1, 2, 3]
print(list2[-2]) # [1, 2, 3]
print(list2[3:]) # [23, 200.0, [1, 2, 3], {'name': '张三'}]
2.2.14 其他需要注意的地方
列表的赋值其实是将同一个数据的指针存储到2个列表中,如果其中一个列表数据发生了改变,被赋值的列表数据也会被改变。如果需要自己新建的数据不随原列表而改变,最好是使用copy函数复制1个副本出来,对副本进行操作,而不会影响原列表。
# list2 = ['你好', 'good', 'www.baidu.com', 23, 200.00, [1, 2, 3], {'name': '张三'}]
# print(list2.__len__())
# print(list2.__init__())
# print(list2.__hash__)
list2 = ['你好', 'good', 'www.baidu.com', 23, 200.00, [1, 2, 3], {'name': '张三'}]
list2.pop(-3)
print(list2) # ['你好', 'good', 'www.baidu.com', 23, [1, 2, 3], {'name': '张三'}]
list2 = ['你好', 'good', 'www.baidu.com', 23, 200.00, [1, 2, 3], {'name': '张三'}]
l9 = list2
print(l9) # '你好', 'good', 'www.baidu.com', 23, [1, 2, 3], {'name': '张三'}]
l9.clear()
print(l9) # []
print(list2) # []
list2 = ['你好', 'good', 'www.baidu.com', 23, 200.00, [1, 2, 3], {'name': '张三'}]
l8 = list2.copy()
print(l8) # ['你好', 'good', 'www.baidu.com', 23, 200.0, [1, 2, 3], {'name': '张三'}]
print(list2) # ['你好', 'good', 'www.baidu.com', 23, 200.0, [1, 2, 3], {'name': '张三'}]
l8.pop(-1)
print(l8) # ['你好', 'good', 'www.baidu.com', 23, 200.0, [1, 2, 3]]
print(list2) # ['你好', 'good', 'www.baidu.com', 23, 200.0, [1, 2, 3], {'name': '张三'}]
2.2 元祖
元祖的元素一旦确定了,是不支持修改的。其主要相关的学习导图如下:
2.2.1 创建元祖
如果元祖只有1个元素,记得在元素后面加个逗号
# 创建元祖
t = ()
print(type(t)) #
t1 = (1)
print(type(t1)) # 单个元素不加逗号的话,就不是元祖了
t2 = (1,)
print(type(t2)) # #
2.2.2 访问元祖元素
访问元祖和访问列表元素一样。
# 访问元祖
tup = ('hello tuple', 1, [1, 2, 3], {'name':'王五', 'age':18})
print(tup[3]) # {'name': '王五', 'age': 18}
print(tup[-2]) # [1, 2, 3]
print(tup[2:]) # ([1, 2, 3], {'name': '王五', 'age': 18})
print(tup[:3]) # ('hello tuple', 1, [1, 2, 3])
print(tup[1:3]) # (1, [1, 2, 3])
2.2.3 扩展或者强制方式修改元祖
元祖中的元素是不允许被修改的,但是可以通过对元祖的连接组合扩展元祖或者通过强制转换的方式来对元祖元素的修改。
# 扩展元祖,元祖本身元素是不支持修改的,但是可以扩展
tup = (1,2,3)
# tup[2] = 4 # 元祖是不支持这样修改元素的。
# print(tup) # TypeError: 'tuple' object does not support item assignment
tup2 = (4,5)
tup3 = ('1','2', '3')
tup4 = tup+tup2
tup5 = tup4 + tup3
print(tup4) # (1, 2, 3, 4, 5)
print(tup5) # (1, 2, 3, 4, 5, '1', '2', '3')
# 通过强制转换法按时,间接修改元祖元素
tup = (1,2,3)
l1 = list(tup)
print(l1) # [1, 2, 3]
l1[2] = 110
print(l1) # [1, 2, 110]
l2 = tuple(l1)
print(l2) # (1, 2, 110)
print(type(l2)) #
2.2.4 删除元祖
元祖的元素值是不允许删除的,只能用del函数来删除真个元祖。删除后的元祖如果再打印后会报错。
# 元祖的删除
tup = ('hello tuple', 1, [1, 2, 3], {'name':'王五', 'age':18})
del tup
print(tup) # NameError: name 'tup' is not defined
2.2.5 元祖部分运算符
元素的运算符同列表差不多,主要有len,+,*,in,for
# 元祖的运算符
tup = (1, [1, 2, 3], {'name':'王五', 'age':18})
print(len(tup)) # 3
t1 = ('hello tuple',)
t2 = tup + t1
print(t2) # (1, [1, 2, 3], {'name': '王五', 'age': 18}, 'hello tuple')
print(t1*3) # ('hello tuple', 'hello tuple', 'hello tuple')
print([1, 2, 3] in tup) # True
for i in range(0,len(tup)):
print(tup[i], end=";") # 1;[1, 2, 3];{'name': '王五', 'age': 18};
2.2.5 元祖内置函数
元素的内置函数和列表一样,有
len,元祖的元素个数
max,元祖中最大值
min,元祖中最小值
tuple(),强制转化成元祖
count,元祖中某个元素出现的个数
index,某个索引对应的值
# 元祖内置函数
tup = (1, 3, 5, 23, 12, 13, 42)
l = ['ni', 2, 3]
print(len(tup)) # 7
print(max(tup)) # 42
print(min(tup)) # 1
t1 = tuple(l)
print(t1) # ('ni', 2, 3)
print(type(t1)) #
print(23 in tup) # True
print(tup.count(12)) # 1
print(tup.index(23)) # 3
2.2.6 元祖索引及截取
# 元祖索引及截取
tup = ('hello tuple', 1, [1, 2, 3], {'name':'王五', 'age':18}, 4, 5, 67)
print(tup[2]) # [1, 2, 3]
print(tup[2:]) # ([1, 2, 3], {'name': '王五', 'age': 18}, 4, 5, 67)
print(tup[:3]) # ('hello tuple', 1, [1, 2, 3])
print(tup[2:5]) # ([1, 2, 3], {'name': '王五', 'age': 18}, 4)
print(tup[-4]) # {'name': '王五', 'age': 18}
print(tup[-4:-1]) # ({'name': '王五', 'age': 18}, 4, 5)