1. 序列(sequence)
1.1 基本概念
• 序列是Python中最基本的一种数据结构。序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(索引)并且序列中的数据会按照添加的顺序来分配索引
• 数据结构指计算机中数据存储的方式
1.2 序列分类
• 可变序列(序列中的元素可以改变):例如 列表(list)字典(dict)
• 不可变序列(序列中的元素不能改变):例如 字符串(str)元组(tuple)
2. 列表(list)
• 列表是Python中的一个对象
• 列表的作用
• 列表中可以保存多个有序的数据
• 列表是用来存储对象的对象
2.1 列表的使用
• 列表的创建:通过[]来创建一个空列表
li = []
print(li,type(li))
[] <class ‘list’>
- len() 获取列表中元素的个数,列表的长度=最大索引值+1
- 通过索引获取列表元素,索引值可以为负,从右向左,-1开始
2.2 列表的切片
指从现有的列表中获取子列表,切片操作不影响原列表,原列表的值不变。
语法:列表[起始index:结束index+1:步长]
- 通过切片获取元素时,包括起始但不包括结束位置的元素【左闭右开】
- 步长可以省略,步长值为1
li = ["a","b","c",'d','e','f']
# 切片⬇️
print(li[0:2])
# 跳着切片,步长为2,⬇️表示获取元素的间隔
print(li[0::2])
# 起始位置与结束位置可以不写⬇️
print(li[:])
# 省略结束位置,⬇️从当前取到最后
print(li[1:])
# 省略开始位置,⬇️从开始到结束位置前1位
print(li[:3])
# 倒序输出⬇️
print(li[::-1])
[‘a’, ‘b’]
[‘a’, ‘c’, ‘e’] # 以2为步长,跳取值
[‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘fff’]
[‘b’, ‘c’, ‘d’, ‘e’, ‘fff’]
[‘a’, ‘b’, ‘c’]
[‘f’, ‘e’, ‘d’, ‘c’, ‘b’, ‘a’] #倒序输出
2.3 修改列表
li = [1,2,3,4]
li[0] = 9
print(li) #得到:[9,2,3,4]
li = [1,2,3,4]
del li[1] #得到[1,3,4]
li = [1,2,3,4]
li[0:3] = 1235 #TypeError: can only assign an iterable不可以,必须传递一个序列
li[0:3] = '1235' #可以,多出来的插入到里面
li[0:0] = ['a'] #向索引为0的位置插入元素
#设置了步长后,序列中的元素个数必须和切片中被替换的元素个数一样⬇️
li[::2] = ['b'] #ValueError: attempt to assign sequence of size 1 to extended slice of size 3
li = [1,2,3,4]
li[1:3] = []
2.4 修改列表的方法
以下是方法:
- li.append() #在列表最后添加一个元素
- li.insert(index,obj)向列表中指定的位置插入元素。第一参数:插入的位置;第二参数:要插入的元素。
- li.extend() #使用新序列扩展当前序列,与append不同的是可以插入多个元素。相当于li += [‘新列表’]
- li.clear() #清空列表
- li.pop() #根据索引,删除指定元素。有返回值,不指定索引时默认删除最后一个。
- li.remove() # 删除指定值的元素。li.remove(“x x x”)
- li.reverse() #反转列表
- li.sort() #对列表元素进行排序
- 列表降序排序:li.sort(reverse=true)
2.5 遍历列表
将列表中的元素取出来
#通过for循环遍历列表
语法:for 变量 in 遍历内容:
代码块
# 通过for循环遍历列表
for item in li:
print(item)
2.5.1 range()函数
for i in range(9):
print(i)
range(9) == range(0,9) == range(0,9,1)
3. 通用操作
3.1 + 和 *
• + 可以将两个列表拼接成一个列表
li = [1,2,3]+[4,5,6]
• * 可以将列表重复指定的次数 (注意2个列表不能够做乘法,要和整数做乘法运算)
li = [1,2,3]
print(li*3) #将列表重复n次
3.2 in 和 not in
• in用来检查指定元素是否在列表当中
• not in 用来检查指定元素是否不在列表当中
li = [1,2,3]
print(1 in li) # true
print(4 not in li) # true
• max() 获取列表中最大值
• min() 获取列表中最小值
lib = [1,2,3]
print(min(lib),max(lib))
3.3 两个方法
• list.index(x[, start[, end]]) #获取指定元素在列表中的位置
• 第一个参数 指定元素
• 第二个参数 表示查找的起始位置
• 第三个参数 表示查找的结束位置
• list.count(x) 统计指定元素在列表中出现的个数
li = [1,2,3,4,5,3,4,24,3]
print(li.count(3)) #3
4 做练习
1.现在有 a = [1,2,3,4,5,6] 不通过函数的形式实现列表的反转([6,5,4,3,2,1]) 并写出推导过程
a[::-1]
推导过程
a = [1,2,3,4,5,6]
a[:] #可以省略头尾
[1, 2, 3, 4, 5, 6]
a[0:] # 可以只省略尾
[1, 2, 3, 4, 5, 6]
a[:6] # 可以只省略头
[1, 2, 3, 4, 5, 6]
a[::1] # 可以省略头尾,默认步长为1
[1, 2, 3, 4, 5, 6]
a[::2] # 可以省略头尾,步长为2时跨取
[1, 3, 5]
a[::0] # 可以省略头尾,步长不能为0
Traceback (most recent call last):
File “”, line 1, in
ValueError: slice step cannot be zero
a[::-1] # 可以省略头尾,步长为-1时倒序输出
[6, 5, 4, 3, 2, 1]
2.给用户9次机会 猜1 - 10 个数字随机来猜数字。如果随机的数字和用户输入的数字一致则表示正确,如果不一致则表示错误。最终结果要求用户怎么也猜不对
t = 0
li = []
li2 = [1,2,3,4,5,6,7,8,9,10]
while t < 9:
num = int(input("请输入一个数字(1-10):"))
if num in li: # 逻辑项,非重点
print("此数字已经猜过了,请重新输入⬇️")
continue
elif num not in li2: # 逻辑项,非重点
print("输入的数字不在(1-10)范围内,请重新输入⬇️")
continue
else:
t += 1
li.append(num)
print("猜测错误,请重新猜⬇️")
for i in li2:
if i not in li:
print("正确的数字是:",i)
请输入一个数字(1-10):2
猜测错误,请重新猜⬇️
请输入一个数字(1-10):2
此数字已经猜过了,请重新输入⬇️
请输入一个数字(1-10):1
猜测错误,请重新猜⬇️
请输入一个数字(1-10):3
猜测错误,请重新猜⬇️
请输入一个数字(1-10):4
猜测错误,请重新猜⬇️
请输入一个数字(1-10):6
猜测错误,请重新猜⬇️
请输入一个数字(1-10):7
猜测错误,请重新猜⬇️
请输入一个数字(1-10):8
猜测错误,请重新猜⬇️
请输入一个数字(1-10):0
输入的数字不在(1-10)范围内,请重新输入⬇️
请输入一个数字(1-10):9
猜测错误,请重新猜⬇️
请输入一个数字(1-10):10
猜测错误,请重新猜⬇️
正确的数字是: 5
.
Process finished with exit code 0
3.有两个列表 lst1 = [11, 22, 33] lst2 = [22, 33, 44]获取内容相同的元素
for i in lst1:
if i in lst2:
print i
22
33