基础数据结构(列表)
列表(list)
Python list(列表),是Python中最常用的一种数据结构,它是一组用方括号括起来、逗号分隔的数据。
创建列表:
list1 = [1, 2, 3, 4, 5]
print(list1)
list2 = ['a', 'b', 'c', 'd', 'e']
print(list2)
结果:
[1, 2, 3, 4, 5]
['a', 'b', 'c', 'd', 'e']
列表中的数据类型可以是相同的,如上面的 int 和 str ,也可以是不同的:
list3 = [1, 2, 3, 'a', 'b']
print(list3)
结果如下:
[1, 2, 3, 'a', 'b']
这个还不算什么,还有更骚的操作,列表里面是可以嵌套列表的:
list4 = [1, 2.33, 'a', list3]
print(list4)
结果如下:
[1, 2.33, 'a', [1, 2, 3, 'a', 'b']]
空列表:
list5 = []
print(list5)
列表的一些基本操作
查看列表的类型,查看类型的函数是 type()
print(type(list4))
<class 'list'>
通过索引取出列表的元素,语法:列表名[索引]
list1 = [1, 2, 3, 4, 5]
print(list1[0])
这里的数字 0 是列表的索引,含义是取出第 0 位的元素。
注意: 这里的索引是从 0 开始的,例如 list1 的索引是 0 ~ 4 。
如果我们直接去取 list1 的索引为 5 的值,就会直接抛出异常。
Python 列表除了正索引还有一个负索引,正索引是列表从头到尾的方向,负索引的是从尾到头。
列表: ['a', 'b', 'c', 'd', 'e']
| | | | |
正索引: 0 1 2 3 4
负索引: -5 -4 -3 -2 -1
使用加号连接列表
print(list1 list2)
结果如下:
[1, 2, 3, 4, 5, 'a', 'b', 'c', 'd', 'e']
对列表元素进行 for 循环
for i in list1:
print(i)
结果如下:
1
2
3
4
5
获取列表长度
print(len(list1))
print(len(list1 list2))
5
10
检查列表中是否存在某个元素
返回的是布尔值 bool
print('a' in list1)
print(1 in list1)
False
True
删除列表
list1 = [1, 2, 3, 4, 5]
del list1
print(list1)
Traceback (most recent call last):
File "D:/Development/Projects/python-learning/base-data-list/Demo.py", line 40, in <module>
print(list1)
NameError: name 'list1' is not defined
删除列表中索引为 i 的元素
list1 = [1, 2, 3, 4, 5]
del list1[2]
print(list1)
👆此处的2是第二位的数,而不是2这个数字
结果如下:
[1, 2, 4, 5]
返回列表中最大(最小)的值
最大:max;最小:min;以下举例最大值,同理最小值将max替换为min:
print(list1)
print(max(list1))
print(list4)
print(max(list4))
结果如下:
[1, 2, 4, 5]
5
[1, 2.33, 'a', [1, 2, 3, 'a', 'b']]
Traceback (most recent call last):
File "D:/Development/Projects/python-learning/base-data-list/Demo.py", line 51, in <module>
print(max(list4))
TypeError: '>' not supported between instances of 'str' and 'float'
list4 中取最大值报错了,报错原因是 ‘str’ 和 ‘float’ 无法比较大小。
列表切片
list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 省略步长时默认为 1
print(list1[3:8])
# 步长为 2
print(list1[3:8:2])
# 从索引 3 开始取到最后
print(list1[3:])
# 从头开始取,取到索引 8 ,并且索引 8 娶不到
print(list1[:8])
# 取所有,步长为 3
print(list1[::3])
# 从索引 1 开始,取到倒数第 2 个,并且倒数第 2 个 取不到
print(list1[1:-2])
# 取所有
print(list1[:])
# 取逆序列表
print(list1[::-1])
# 取逆序,并且步长为 2
print(list1[8:1:-2])
运行结果如下:
[3, 4, 5, 6, 7]
[3, 5, 7]
[3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7]
[0, 3, 6, 9]
[1, 2, 3, 4, 5, 6, 7]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[8, 6, 4, 2]
🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟
list.append(obj)
在列表末尾添加新的对象
list1.append("Python")
print(list1)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'Python']
list.count(obj)
统计某个元素在列表中出现的次数
list2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list2.append("Python")
list2.append("Python")
list2.append("Python")
list2.append(1)
print(list2.count("Python"))
print(list2.count(1))
3
2
list.extend(seq)
在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list1.extend(list2)
print(list1)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'Python', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'Python', 'Python', 'Python', 1]
可以看到 list1 在经过 list2 的扩展后,同时含有了 list1 和 list2 的所有数据。
extend 和 append 非常像,但是 extend 一次可以添加一个列表,而 append 一次只能添加一个元素。
list.index(obj)
将对象插入列表
index 是插入的索引值, obj 是要插入的元素。
list1.insert(0, "Hello")
print(list1)
list3 = [0, 1, 2]
list4 = [2, 2]
list3.insert(1, list4)
print(list3)
['Hello', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'Python', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'Python', 'Python', 'Python', 1]
[0, [2, 2], 1, 2]
list.pop([index=-1])
移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list3.pop()
print(list3)
list3.pop(1)
print(list3)
[0, [2, 2], 1]
[0, 1]
list.remove(obj)
移除列表中某个值的第一个匹配项
list5 = [1, 2, 3, 4, 4, 5]
list5.remove(4)
print(list5)
[1, 2, 3, 4, 5]
list.reverse()
反向列表中元素
list5.reverse()
print(list5)
[5, 4, 3, 2, 1]
list.sort( key=None, reverse=False)
排序
list6 = [2, 5, 1, 9, 6, 3]
list6.sort()#正序
print(list6)
list6.sort(reverse=True)#倒序
print(list6)
[1, 2, 3, 5, 6, 9]
[9, 6, 5, 3, 2, 1]