Python笔记2——数组

本文介绍了Python中数组的基本概念,包括数据类型一致性、固定长度和索引操作。详细讲解了数组的正序和倒序索引,以及序列名的使用方法。此外,还涵盖了列表解析的用法和一些常见问题如最值计算、元素存在性和翻转数组。最后提到了二分查找算法在有序数组中的应用。
摘要由CSDN通过智能技术生成

        概念:

        在Python中,数组(Array)是一种有序的数据集合,用于存储固定数量的相同类型的元素。数组是一个连续的内存空间,可以按照索引访问和修改每个元素。

        特点:

  1. 数组中的元素具有相同的数据类型,可以是数字、字符串或其他类型。
  2. 数组的大小是固定的,一旦创建,其长度不能改变。
  3. 可以通过索引值来访问和修改数组中的元素。
  4. 数组中的元素在内存中是连续存储的。

        序列通用操作:

索引/角标:

 arr = [1,2,3,4,5,6,7,8,9]
>>>arr[0]       数组正序是从零开始的
1
>>>arr[8]
9
>>>arr[-1] # 倒数第 1
9
>>>arr[-2] # 倒数第 2
8
>>>arr[-100]                                  超过范围
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>>arr[100]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
序列名[a : b : c] range(a, b, c) 基本类似  
>>>arr[2:]         # 从角标 2 开始向尾遍历 步长为 1           正数时为从头开始遍历
[3, 4, 5, 6, 7, 8, 9]
>>>arr[2::2]         # 从角标 2 开始向尾遍历 步长为 2
[3, 5, 7, 9]
>>>arr[:6]         # 从头开始到角标 6( 不取 ) 步长为 1
[1, 2, 3, 4, 5, 6]
>>>arr[:6:3]         # 从头开始到角标 6( 不取 ) 步长为 3
[1, 4]
>>>arr[:] # 从头到尾
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>arr[::]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>arr[::2]
[1, 3, 5, 7, 9]

特殊的情况

>>> arr[-1:-7]         # 从尾到头 步长必须负数      从倒数第一到倒数第七 此时没有打步长 默认正数 错误
[]
>>> arr[-1:-7:-1]
[9, 8, 7, 6, 5, 4]
>>> arr[-9:7]         # 从头到尾 步长为正数
[1, 2, 3, 4, 5, 6, 7]
>>> arr[0:7]
[1, 2, 3, 4, 5, 6, 7]
>>> arr[-9:-2]         # 从头到尾 步长为正数
[1, 2, 3, 4, 5, 6, 7]
成员资格 (数组中是否存在该值)
>>> 1 in arr
True
>>> 10 in arr
False
长度与最值
>>> len(arr)         # 获取序列的长度
9
>>> max(arr)         #数组最大值
9
>>> min(arr)         #数组的最小值
1
        
例:
>>> s = "ABC" 
>>> len(s)  
3
>>> max(s)
'C'
>>> min(s)
'A

        创建

arr = []   #创建一个空列表
arr = [1, 2, 3, 4] #创建一个有若干元素的列表
arr = [None] * 5 #创建一个有长度但没有值的列表

        通过列表解析式来创建

格式[目标值表达式 for 目标值 in 迭代对象 if ....]

例1:创建1~100当中 能够被3整除 且 能够被5整除 的所有数字

一般情况:
for x in range(1, 101):
        if x % 3 == 0 and x % 5 == 0:
                print(x)
通过列表解析:
arr = [x for x in range(1, 101) if x % 3 == 0 and x % 5 == 0]
例2:水仙花数
一般情况:
for num in range(100, 1000):
        a = num % 10
        b = num // 10 % 10
        c = num // 100
        if a ** 3 + b ** 3 + c ** 3 == num:
                print(num)         
通过列表解析式:
arr = [num for num in range(100, 1000) if (num % 10) ** 3 + (num // 10 % 10) ** 3 + (num // 100) ** 3 == num]
print(arr)
条件不多时可以使用列表解析式

        通过输入来获取元素

n = eval(input())                # n是输入的长度
arr = input().split(" ")         # 将输入的数据以空格分割 分割的结果就是列表  但是得到的是字符串而不是纯数字
print(arr)
arr = [int(x) for x in arr]        # 将上面的每一个元素都转换为纯数字而不是字符串
print(arr)

        遍历问题

arr = [1,2,3,4,5,6,7,8,9]
# 通过角标遍历
for i in range(len(arr)):
        print(arr[i])
# 通过foreach遍历
for num in arr:
        print(num)

        最值问题

# 比较得出最大最小值
maxNum = arr[0]
minNum = arr[0]
for i in range(1, len(arr)):
        if arr[i] > maxNum:
                maxNum = arr[i]
        if arr[i] < minNum:
                minNum = arr[i]
print(maxNum)
print(minNum )
从数组的第一个元素开始,后面的挨个和其进行比较,如果求最大值,后一个元素大于前一个元素,则将后一个元素的值重新赋给maxNum,接着再与其后一个值进行比较。如果求最小值,同理。

        存在性问题

# 元素是否存在        遍历数组一个个找
key = 10
for num in arr:
        if num == key:
                print("存在")
                break
else:
        print("不存在")
# 元素在哪个位置 从左到右第1次出现的角标 不存在返回-1
key = -4
index = 0
for i in range(len(arr)):
        if arr[i] == key:
                index = i
                break
else:
        index = -1
print(index)

        翻转问题

arr = arr[-1::-1]            #从尾到头开始 
print(arr)
for i in range(0, len(arr) // 2):    
        j = len(arr) - 1 - i
        arr[i], arr[j] = arr[j], arr[i]
print(arr)
 
left = 0                     #一个在第一个   一个在最后一个 一路交换过来
right = len(arr) - 1
while left <= right:
        arr[left], arr[right] = arr[right], arr[left]
        left += 1
        right -= 1
print(arr)

        查找算法

        二分查找

要求数据必须有序
arr = [1,2,3,4,5,6,7,8,9]    
minIndex = 0
maxIndex = len(arr) - 1 
midIndex = (minIndex + maxIndex) // 2            #先建立三个值的位置分别是头,尾,中间
key = 8
while arr[midIndex] != key:                                #判断给的值是否等于中间值  此时是不等于
        if arr[midIndex] < key:                               #当中间值小于要找的值
                minIndex = midIndex + 1                   #则将最小值移到中间值的后一个位置上
        else:
                maxIndex = midIndex - 1                    #如果中间值大于要找的值 则将最大值移到中间值                                                                                   的前一个位置
        if minIndex > maxIndex:                              #如果最小值的位置出现在最大值右边的 那么数组中不存在要找的值
                midIndex = -1
                break                                                    #midlndex返回 -1 break结束循环
        midIndex = (minIndex + maxIndex) // 2
print(midIndex)                                                      #最后midlndex会选中要找的值或者没有  打印                                                                                             midlndex
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值