Python 学习笔记
一、序列
1.1、什么是序列 ?
序列是 Python 中最基本的一种数据结构。数据结构是指计算机中数据存储的方式。
向序列添加数据,序列会安装添加顺序给予编号(0,1,2 …),而这些编号称之为 ‘索引’,且从 0 开始记录。
所以,序列也可以理解为一个按照索引排序的有序队列。
1.2、序列的分类
- 可变序列
即,序列当中的元素可以改变。如:列表(list) - 不可变序列
即,序列当中的元素不可以改变。如:字符串(str)、元组(tuple)
二、列表的创建
对象(object) 就是内存中用来存储数据的一块区域。
列表 也是 Python 中的一个对象,可以保存多个有序的数据。
列表当中存储的数据,我们称之为 元素 。
列表的创建
可以通过:列表名 = []
来创建一个空的列表。如:list = []
列表可以存放多个 任意类型 数据,每个元素用 , 隔开。如:list = [1,'python',None,True,[1,2,3]]
可以通过 索引 取出列表的元素:
# 索引是从0开始. 列表第一个位置就是 0, 第二个是 1, 以此类推
# 索引值可以为负数, 此时索引从 -1 开始, 从后往前获取元素
list = [1,'python',None,True,[1,2,3]]
print(list[1]) # python
print(list[-1]) # [1,2,3]
# 获取列表的长度(列表中元素的个数) len()
# 获取长度 其实就是, 列表的最大索引值 + 1
print( len(list) )
三、列表切片
切片: 指从现有类别,获取一个子列表(某几个连续的元素)。
语法: 列表 [ 起始位置索引 : 结束位置索引 ]
# 通过切片获取元素,会包括起始位置的元素,不会包括结束位置的元素
# 做切片时,总会返回一个新的列表,不会影响原来的列表
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
print( hero[0:2] )
# 起始位置和结束的位置的索引是可以不写的
# 1、如果省略结束位置,则会一直截取到最后
print( hero[1:] )
# 2、如果省略开始位置,则会从第一个元素开始截取到结束位置(不包括)
print( hero[:3] )
# 3、如果开始位置和结束位置都不写,则会从第一个元素截取到最后
print( hero[:] )
语法增加 '步长’
步长: 表示获取元素的间隔,默认值是 1(可省略)。也可以看作是从当前元素向后“走几步”,
如:步长为 1,就是向后走 1 步,到达下一个索引;
步长为 2,就是向后走 2 步,间隔一个索引到达下下个索引。
语法:列表 [ 起始 : 结束 : 步长 ]
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
print( hero[::2] )
# 步长可以是负数,但是不能为 0
# 如果是负数, 则会从列表的后部向前取元素
print( hero[::-1] )
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
print(hero[:1:-1]) # 若只规定一边范围, 则从所定边开始倒数
print(hero[3::-1])
print(hero[1:3:2]) # 若规定两边, 则从小到大用正数, 从大到小用负数
print(hero[3:1:-1]) # 可自行尝试, 观察效果
四、序列的通用操作
通用操作: 指列表、元组、字符串等所有序列都可以使用的操作。
4.1、’ + ’ 和 ’ * '
# + 可以将两个列表拼接成一个列表
my_list = [1,2,3] + [4,5,6]
print(my_list)
# * 可以将列表重复指定的次数
my_list = [1,2,3] * 2
print(my_list)
4.2、in 和 not in
# in 用来检查指定元素是否在列表当中, 如果在返回 True , 不在返回 False
# not in 用来检查指定元素是否不在列表当中, 如果不在返回 True , 在返回 False
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
print('钢铁侠' not in hero)
4.3、min() 和 max()
- min() 获取列表当中最小值
- max() 获取列表当中最大值
arr = [10,2,4,5,6,333]
print( min(arr) , max(arr) )
方法和函数,方法和函数基本上是一样的。我们可以说方法是特殊的函数。
方法必须和对象联系在一起 对象.方法()
形式来调用,如:s.index()
# s.index() 获取指定元素在列表当中的位置(索引)
hero = ('钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长')
print(hero.index('蜘蛛侠'))
# s.count() 统计指定元素在列表当中出的次数
hero = ('钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长','蜘蛛侠','蜘蛛侠','蜘蛛侠','蜘蛛侠')
print(hero.count('蜘蛛侠'))
print(hero.count('灭霸'))
五、修改列表
5.1、修改列表元素
hero = ('钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长')
print('修改前',hero)
# 通过赋值来修改元素
hero[1] = '雷神'
print('修改后',hero)
# 通过切片来修改元素
hero[0:2] = ['黑豹'] # 给切片进行赋值时,必须传递的是一个序列.该序列会代替原切片的元素
print('修改后',hero)
hero[0:0] = ['雷神'] # 向多因为 0 的位置插入元素, 其他元素向后移动一位
print('修改后',hero)
hero[::2] = ['黑豹','雷神','灭霸'] # 若设置了步长,序列与切片中的元素个数必须一致
print('修改后',hero)
5.2、删除列表元素
# 通过切片来删除元素
del hero[0:2]
print('修改后',hero)
del hero[::2]
print('修改后',hero)
hero[1:3] = []
print('修改后',hero)
# 若想修改字符串, 可以, 但需先转为列表
s = 'python'
s = list(s)
s[1] = 'j'
print('修改后',s)
5.3、更多操作,可在官方文案查看
https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range
六、列表的方法
6.1、向列表添加元素
hero = ['钢铁侠','绿巨人','蜘蛛侠']
print('修改前',hero)
# append() # 向列表最后添加一个元素
hero.append('黑寡妇')
print('修改后',hero)
# extend() # 向列表最后添加多个元素, 使用新的序列来扩展当前的序列
# 需要一个序列做我参数,它会将该序列当中的元素添加到列表当中
hero.extend(['黑寡妇','蚁人']) # extend 相当于如下:
hero += ['黑寡妇','蚁人']
print('修改后',hero)
# insert() # 向列表指定位置插入一个元素
# 需 2 个参数: 1.要插入的位置 , 2.要插入的元素
hero.insert(2,'黑寡妇')
6.2、删除列表元素
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长','黑寡妇']
# s.pop() # 删除指定的索引元素, 如果不传递索引值删除的是列表最后一个元素
result = hero.pop() # 默认删除最后元素
print(result) # 有返回值
print('修改后',hero)
result = hero.pop(2) # 删除索引为 2 的元素
print(result)
print('修改后',hero)
# s.remove() # 删除指定的元素
result = hero.remove('绿巨人') # 相同值的元素有多个,只会删除第一个
print(result) # 没有返回值
print('修改后',hero)
6.3、列表中元素的排序
# sort() # 用来对列表当中的元素进行排序, 默认是升序
lst = list('asggerghuh')
print('修改前',lst)
lst.sort()
print('修改后',lst)
lst.sort(reverse=True) # reverse() 用来反转列表
print('修改后',lst)
七、遍历列表
遍历列表: 指的就是从列表当中的元素提取出来。
7.1、通过 while 循环来遍历元素
# 创建一个循环 打印结果
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
i = 0
while i < len(hero):
print(hero[i])
i += 1
7.2、过for循环来遍历元素
语法:语法 for 变量 in 序列: 代码块
# for循环的代码块会执行多少次,取决于列表当中有多少个元素
# 每执行一次就会将序列中的一个元素赋值给变量
# 所以我们可以通过变量来获取列表当中的元素
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
for s in hero:
print(s)
八、range( ) 创建一个自然数序列
# range(start, stop, step)
# start 开始 默认是从0开始 例如 range(5) = range(0,5)
# stop 结束 不包括结束 例如 range(0,5) 是 [0, 1, 2, 3, 4], 没有5
# step 步长 默认为 1. range(5) = range(0,5) = range(0,5,1)
r = range(0,30,5)
print(list(r))
九、练习
练习 1: 获取一个列表当中的奇数
lst = [1,2,3,4,5,6,7,8,9]
for i in range(0,9,2):
print(lst[i])
练习 2: 找出100以内能够被3整除的数
# 第一种实现方式
# 用来接收所有可以被3整除的数
lst = []
for i in range(1,101):
if i % 3 == 0: # 判断 100以内能够被3整除的数
lst.append(i)
print(lst)
# 第二种方式
print(list(range(3,101,3)))
练习 3: 需求 a = [1,2,3,4,5,6] 不通过函数来实现列表的反转,并写出推到过程。
考点: 对列表 切片的另一种操作 1 + 1 =2
# 第 1 步, 得出结果:
>>> a[::-1]
[6, 5, 4, 3, 2, 1]
# 第 2 步, 推到过程:
>>> a[0:4] # 切片
[1, 2, 3, 4]
>>> a[0:4:1] # 加上步长, 默认为 1
[1, 2, 3, 4]
>>> a[0:4:2] # 步长为 2
[1, 3]
# 以上操作都是从左往右读取元素, 步长位负数就是从右往左读取元素
>>> a[4:1:-1] # 步长为 负数
[5, 4, 3]
>>> a[::-1] # 不使用切片, 省略开始索引, 省略结束索引, 得出列表反转.
[6, 5, 4, 3, 2, 1]