python 入门之路 (6)
1. 序列
1.1 基本概念
序列是python最基本的一种数据结构,用于保存一组有序的数据,都有一个唯一的位置(索引)与之对应,并且序列中的数据会按照添加的顺序来分配索引
数据结构指计算机中数据的存储方式
1.2 序列的分类
可变序列:序列中的元素可以改变,如列表list,字典dict
不可变序列:序列中的元素不可变,如字符串str,元组 tuple
2. 列表 list
列表是python中的一个对象
列表的作用:
保存多个有序数据
用于存储不同的对象
2.1 列表的创建
通过[]创建空列表
例:
lst = []
lst = [1,'pyhton',None, True, max(1,2,3)]
我们可以通过索引(index)来获取列表中的元素,索引就是元素在列表中的位置,列表当中每一个位置都会唯一对应了一个索引 索引是从0开始,列表的第一个位置就是0,第二个位置是1 以此类推
注: 索引可以为负数,从后往前获取元素,最后第一个数为-1,以此类推,如:
print(lst[2])
print(lst[-2])
# 返回结果
# None
# True
len() 函数可以用于获取列表的长度(列表中元素的个数),为列表的最大索引数+1
print(len(lst))
# 返回结果 5
2.2 切片
(1)切片指从现有列表中获取一个子列表,可以通过切片来获取指定的元素
(2)语法:
列表名[起始索引:结束索引:步长]
(3)通过切片获取元素时,会包括起始位置的元素,不会包括结束位置的元素,左闭右开
(4)起始位置和结束位置的索引可以不写
a. 省略结束位置,则会从当前位置一直截取到最后
b. 省略开始位置, 则会从第⼀个元素截取到结束的元素,但是不包括结
束的元素
c. 同时省略开始位置和结束位置, 则会从第⼀个元素开始截取到最后⼀
个元素
(5)步⻓表示每次获取元素的间隔,默认是1(可以省略不写)
(6)步⻓不能是0,但可以是是负数
hero = ['钢铁侠','蜘蛛侠','黑寡妇','绿巨人']
print(hero) # ['钢铁侠', '蜘蛛侠', '黑寡妇', '绿巨人']
lst = hero[0:2:1]
print(lst) # ['钢铁侠', '蜘蛛侠']
# 步长可以省略默认值为1
# 步长可以为负数但是不能为0
print(hero[1:3:1]) # ['蜘蛛侠', '黑寡妇']
print(hero[1:3]) # ['蜘蛛侠', '黑寡妇']
print(hero[1:3:-1]) # []
print(hero[3:1:-1]) # ['绿巨人', '黑寡妇']
# 如果省略结束位置 则从当前的位置会一直截取到最后
print(hero[1:]) # ['蜘蛛侠', '黑寡妇', '绿巨人']
# 如果省略开始位置 则会从第一个元素截取到结束位置,但是不包括结束位置的元素
print(hero[:2]) # ['钢铁侠', '蜘蛛侠']
# 同时省略开始位置和结束位置, 则会从第⼀个元素开始截取到最后
print(hero[::-1]) # ['绿巨人', '黑寡妇', '蜘蛛侠', '钢铁侠']
2.3 通用操作
##+ 和 *
##+ 可以将两个列表拼接成⼀个列表
lst = [1,2,3] + [4, 5,6]
# [1, 2, 3, 4, 5, 6]
##* 可以将列表重复指定的次数 (注意2个列表不能够做乘法,要和整数做乘
法运算)
lst = [1,2,3] * 2
# [1, 2, 3, 1, 2, 3]
in 和 not in
in⽤来检查指定元素是否在列表当中
not in ⽤来检查指定元素是否不在列表当中
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长','蜘蛛侠','蜘蛛侠']
r = '绿巨人' in hero
r = '绿巨人' not in hero
print(r) # True,False
len() 获取列表中元素的个数
max() 获取列表中最⼤值
min() 获取列表中最⼩值
lst = [1,2,3,4,5,6]
print(min(lst),max(lst)) # 1 6
函数与方法的区别
函数function:xx()
方法method:yy.xx()
list.index(x[, start[, end]])
第⼀个参数 获取指定元素在列表中的位置
第⼆个参数 表示查找的起始位置
第三个参数 表示查找的结束位置
print(hero.index('蜘蛛侠')) # 得到第一个蜘蛛侠的位置 2
print(hero.index('蜘蛛侠',3,7)) # 得到一个范围内出现的蜘蛛侠出现的第一个位置 6
list.count(x) 统计指定元素在列表中出现的个数
print(hero.count('蜘蛛侠')) # 3
2.4 修改列表
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
通过索引修改
hero[0] = '雷神'
print(hero) # ['雷神', '绿巨人', '蜘蛛侠', '黑寡妇', '蚁人', '美国队长']
通过切片修改,起始就是给切⽚的内容重新赋值,但是赋值的内容必须是⼀
个序列
hero[0:3] = 'abcd' # ['a', 'b', 'c', 'd', '黑寡妇', '蚁人', '美国队长']
hero[1:3] = '123' # ['钢铁侠', '1', '2', '3', '黑寡妇', '蚁人', '美国队长']
hero[1:3] = ['123'] # ['钢铁侠', '123', '黑寡妇', '蚁人', '美国队长']
hero[0:0] = '雷神' # ['雷', '神', '钢铁侠', '绿巨人', '蜘蛛侠', '黑寡妇', '蚁人', '美国队长']
hero[0:0] = ['雷神'] # ['雷神', '钢铁侠', '绿巨人', '蜘蛛侠', '黑寡妇', '蚁人', '美国队长']
当设置了步⻓时,序列中元素的个数必须和切⽚中元素的个数保持⼀致
hero[::2] = ['雷神','灭霸','黑豹'] # ['雷神', '绿巨人', '灭霸', '黑寡妇', '黑豹', '美国队长']
删除元素
(1)del list[起始:结束]
(2)list = []
对于字符串的修改,可先将字符串转换为列表类型,再进行修改
s = 'python' # 不可变序列
# s[1] = 'j' # TypeError: 'str' object does not support item assignment
s = list(s)
s[1] = 'j'
print(s) # ['p', 'j', 't', 'h', 'o', 'n']
2.5 列表的方法
方法格式 | 作用 |
---|---|
list_name.append(element_new) | 向列表的最后添加⼀个元素 |
list_name.insert(index,element_new) | 向列表指定位置插⼊⼀个元素 |
list_name.extend(list_new) | 使用新的序列来扩展当前的序列 ,一般添加到原列表的末尾 |
list_name.clear() | 清空列表 |
list_name.pop(index) | 根据索引删除并返回指定元素 |
list_name.remove(element) | 删除指定元素 (如果相同值的元素有多个,只会删除第⼀个) |
list_name.reverse() | 翻转列表 |
list_name.sort(reverse=False) | 来对列表中的元素进⾏排序 reverse=True 反序,False 正序 |
2.6 遍历列表
2.6.1 for循环
通过for 循环遍历列表
语法:
for 变量 in 序列(遍历的规则):
代码块
注意: for循环的代码块会执⾏多次,序列中有⼏个元素就会执⾏⼏次。每执⾏
⼀次就会将序列中的⼀个元素赋值给变量,所以我们可以通过变量来获取列表
中的元素
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇']
# 遍历列表 指的是将列表中的元素取出来
i = 0
# while i < 4: # 元素已知,或拿到长度
while i < len(hero): # 元素已知,或拿到长度
print(hero[i])
i += 1
for h in hero:
print(h)
2.6.2 range()函数
语法:
range(start:stop:step)
·start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于
range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1,
2, 3, 4]没有5
step:步⻓,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
作业
# 作业1 现有a=[1,2,3,4,5,6],不通过函数的形式实现列表的反转并写出推导过程
a = [1,2,3,4,5,6]
# 对于列表的切片操作,有形如 s[开始:结束:步长]的形式
# 当不考虑步长时
print(a[0:6]) # 打印 [1, 2, 3, 4, 5, 6]
# 当省略开始时或省略结束时
print(a[:6]) # print(a[:]) 均打印[1, 2, 3, 4, 5, 6]
# 当考虑步长时,默认步长为1,即a[0:6]==a[0:6:1]
# 为保证所有元素不变,其位置反转,只需令步长为-1,即
print(a[::-1])
# 作业3 有两个列表lst1=[11,22,33]和lst2=[22,33,44],获取相同的元素
# 方法1
# lst1 = [11,22,33]
# lst2 = [22,33,44]
# i = 0
# while i < 3:
#
# j = 0
# while j < 3:
#
# if lst1[j] == lst2[i]:
#
# print(lst1[j])
# # break
# j += 1 # 此处需要更新迭代的变量值,如果不更新,j一直不变,也就会一直打印
#
# else:
#
# j += 1
#
# i += 1
# 方法2
# lst1 = [11,22,33]
# lst2 = [22,33,44]
# for i in lst1:
#
# for j in lst2:
#
# if j == i:
#
# print(j)
# 作业2 给用户9次机会,猜1-10个整数随机猜数,
# 如果随机出现的数字与用户输入的数字一致,则表示正确,不一致则显示错误,最终结果需要用户怎么也猜不着
count = 9
num_input = int(input(f'请输入1-10内的任意整数,你还有{count}次机会:'))
lst = [1,2,3,4,5,6,7,8,9,10]
while count > 1:
for i in lst:
if num_input == i:
lst.remove(num_input)
print('错误!')
# print(lst)
count -= 1
num_input = int(input(f'请输入1-10内的任意整数,你还有{count}次机会:' ))
if count == 1:
# for i in lst:
lst.remove(num_input)
print(f'你猜错了!正确答案为{lst}')
# # count -= 1
# num_input = int(input(f'请输入1-10内的任意整数,你还有{count}次机会:'))