赞
踩
本次博客我是通过Notion软件写的,第一次尝试,转md文件可能不太美观,大家可以去我的原笔记中查看:Python蓝桥杯训练:基本数据结构 [数组],持续更新中,另外这是我创建的编程学习小组频道,想一起学习的朋友可以一起!!!
Python 数组是一种线性数据结构,它是一组相同类型的元素的集合。数组元素可以通过编号来访问,这个编号就是元素的下标。
数组有两种实现方式:顺序存储和链式存储。
Python 中有两种主要的数组类型: 列表(list)
和 numpy 数组(numpy.ndarray)
。
创建数组
列表推导式 (list comprehension)
** 创建数组:>>> numbers = [i for i in range(10)]
>>> print(numbers)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range()
函数创建数组>>> numbers = list(range(10))
>>> print(numbers)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
*重复操作符号
**创建数组>>> numbers = [0] * 10
>>> print(numbers)
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
关键字
**创建数组>>> numbers = [0 for _ in range(10)]
>>> print(numbers)
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
numpy 中的函数
**创建数组>>> import numpy as np
>>> numbers = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> print(numbers)
[0 1 2 3 4 5 6 7 8 9]
array 模块
**创建数组>>> from array import array
>>> numbers = array("i", [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> print(numbers)
array('i', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
访问数组元素
下标
**访问数组中的元素>>> numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print(numbers[0]) # 访问第0个元素
0
>>> print(numbers[3]) # 访问第3个元素
3
>>> print(numbers[-1]) # 访问最后一个元素
9
>>> print(numbers[-2]) # 访问倒数第二个元素
8
切片语法
**来访问数组的一部分元素>>> print(numbers[2:5]) # 访问第2个到第4个元素
[2, 3, 4]
>>> print(numbers[:5]) # 访问前5个元素
[0, 1, 2, 3, 4]
>>> print(numbers[5:]) # 访问后5个元素
[5, 6, 7, 8, 9]
enumerate
函数遍历数组并获取下标和元素>>> for index, value in enumerate(numbers):
>>> print(f'Index: {index}, Value: {value}')
numpy中的索引
**方式import numpy as np
numbers = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(numbers[0])
print(numbers[2:5])
修改数组元素
下标
**来修改数组中的元素>>> numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> numbers[0] = 10
>>> print(numbers)
[10, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> numbers[3] = 20
>>> print(numbers)
[10, 1, 2, 20, 4, 5, 6, 7, 8, 9]
>>> numbers[-1] = 30
>>> print(numbers)
[10, 1, 2, 20, 4, 5, 6, 7, 8, 30]
切片语法
**来修改数组的一部分元素>>> numbers[2:5] = [100, 101, 102]
>>> print(numbers)
[10, 1, 100, 101, 102, 5, 6, 7, 8, 30]
对于 numpy 中的数组, 修改元素和列表基本相同, 但是 numpy 提供了更丰富的修改操作,如维度修改,布尔修改等。
import numpy as np
numbers = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
numbers[0] = 10
numbers[2:5] = [100, 101, 102]
需要注意的是,对于numpy中的数组来说, 修改元素会直接修改原数组, 而对于其他数组类型(如列表)来说, 修改操作是在内存中创建了一个新的数组, 而原数组不会被修改。
数组长度
len()
**函数可以获取数组的长度>>> numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print(len(numbers))
10
shape
**属性来获取数组长度import numpy as np
numbers = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(numbers.shape)
数组排序
sort()
**方法来对数组进行排序>>> numbers = [3, 1, 4, 2, 5, 9, 7, 8, 6, 0]
>>> numbers.sort()
>>> print(numbers)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
sorted()
**函数来对数组进行排序,sorted()函数返回一个新的已排序的数组>>> numbers = [3, 1, 4, 2, 5, 9, 7, 8, 6, 0]
>>> new_numbers = sorted(numbers)
>>> print(new_numbers)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
np.sort()
**函数import numpy as np
numbers = np.array([3, 1, 4, 2, 5, 9, 7, 8, 6, 0])
numbers.sort()
print(numbers)
numbers = np.array([3, 1, 4, 2, 5, 9, 7, 8, 6, 0])
new_numbers = np.sort(numbers)
print(new_numbers)
数组遍历
for循环
**来遍历数组>>> numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for num in numbers:
>>> print(num)
enumerate()
**函数来遍历数组,enumerate()函数返回的是元素的索引和值>>> numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for index, num in enumerate(numbers):
>>> print(f'Index: {index}, Value: {num}')
import numpy as np
numbers = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
for num in numbers:
print(num)
需要注意的是, 对于大数组来说, python中的 for循环遍历是比较耗时的, 如果需要遍历大数组, 可以使用 numpy中的迭代器 np.nditer()
, 也可以使用 numpy中的向量化操作来遍历大数组。
import numpy as np
numbers = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
for num in np.nditer(numbers):
print(num)
删除数组元素
**下标**
和 del
关键字来删除数组中的元素>>> numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> del numbers[0]
>>> print(numbers)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> del numbers[3:5]
>>> print(numbers)
[1, 2, 3, 6, 7, 8, 9]
np.delete()
**函数来删除元素import numpy as np
numbers = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
numbers = np.delete(numbers, [0,2,4,6,8])
print(numbers)
数组合并
+
**方法来合并两个数组>>> numbers1 = [0, 1, 2, 3, 4]
>>> numbers2 = [5, 6, 7, 8, 9]
>>> numbers3 = numbers1 + numbers2
>>> print(numbers3)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
extend()
方法来合并两个数组>>> numbers1 = [0, 1, 2, 3, 4]
>>> numbers2 = [5, 6, 7, 8, 9]
>>> numbers1.extend(numbers2)
>>> print(numbers1)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
np.concatenate()
函数来合并数组import numpy as np
numbers1 = np.array([0, 1, 2, 3, 4])
numbers2 = np.array([5, 6, 7, 8, 9])
numbers3 = np.concatenate((numbers1, numbers2))
print(numbers3)
数组切片
下标
和切片语法
**来切片数组>>> numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print(numbers[0:5]) # 输出 [0, 1, 2, 3, 4]
>>> print(numbers[3:8]) # 输出 [3, 4, 5, 6, 7]
>>> print(numbers[5:]) # 输出 [5, 6, 7, 8, 9]
>>> print(numbers[:5]) # 输出 [0, 1, 2, 3, 4]
import numpy as np
numbers = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(numbers[0:5]) # 输出 [0 1 2 3 4]
print(numbers[3:8]) # 输出 [3 4 5 6 7]
二分查找方法介绍:
二分查找(Binary Search)是一种在有序数组中查找特定元素的搜索算法。它的基本思想是:首先,将整个有序数列分成前、中、后 三个部分;先比较中间部分元素是否等于要查找的元素,如果相等则查找成功;否则如果中间部分元素大于要查找的元素,则在前半部分元素中继续查找;如果中间部分元素小于要查找的元素,则在后半部分元素中继续查找。重复以上过程,直到找到要查找的元素,或者查找范围为空。
二分查找的时间复杂度为O(log n)。
二分查找
**Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。