python学习第六站:列表

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]
  • del修改⬇️
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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值