零基础入门学习Python(11)-列表(3)

列表的一些常用操作符

比较操作符

逻辑操作符

连接操作符

重复操作符

当有多个元素时,默认是从第0个元素比较的
在这里插入图片描述
在这里插入图片描述

字符串比较的是每一个字符对应的ASCII码值的大小
在这里插入图片描述
什么是ASSII码?
是American Standard Code for Information Interchange缩写,美国标准信息交换代码是由美国国家标准学会(American National Standard Institute , ANSI )制定的,标准的单字节字符编码方案,用于基于文本的数据。

我们知道字符串可以用“+”做拼接,用“*”复制若干次,在列表中也可以实现
expend()扩展列表会显得更为规范,而不用“+”,因为加号有一些操作是违规的,因为连接操作符加号不能实现添加新元素的操作
在这里插入图片描述
在这里插入图片描述

成员关系操作符

in

not in

在这里插入图片描述
in 和 not in 只能判断一个层次的成员关系,同break和continue只影响一层的循环的道理是一样的
在这里插入图片描述
**对于列表中的列表中的值我们该如何访问呢???**用两个[]输入索引值即可
在这里插入图片描述

列表类型的内置函数

列表有多少小伙伴呢???用dir函数查询
在这里插入图片描述

count():此方法的作用是统计每个元素在列表中出现的次数

列表的内置方法要用点“.”表示范围
在这里插入图片描述

index():该方法可以限定查找的范围,即返回其参数在列表中的位置

  • 参数1:元素值
  • 参数2:范围起始
  • 参数3:范围终止
    在这里插入图片描述
    list3.index(123,1,4):返回列表list3中元素123在1-3索引值范围内第一次出现的位置

reverse():此方法的作用是使整个列表原地翻转

在这里插入图片描述

sort():此方法是对列表元素进行排序,默认从小到大排,

在这里插入图片描述
如果需要从大到小进行排序呢?

  • 方法1:先调用sort()方法从小到大排,再用reverse()方法原地翻转
  • 方法2:sort()方法其实有3个参数:
    【1】参数1:func参数用于设置排序的算法
    【2】参数2:key参数用于设置排序的关键字,默认使用归并排序
    【3】参数3:reverse参数默认是False,如果将reverse参数改为True的话就会从大到小排序
    在这里插入图片描述

关于分片拷贝的补充

  • 使用分片slice可以创建列表的拷贝
    Python的变量就像一个标签,就像一个名字一样,贴哪儿是哪儿,指哪儿打哪儿
    列表变量名的赋值只不过是引用的拷贝,如果你修改了列表中的元素,那么会影响到另外一个指向它的引用
    list6 = [4,5,3,6,8,1]
    list7 = list6[:]
    list8 = list6
    list7是list6的拷贝,而将list6赋值给list8,看起来效果是一样的,但对list6.sort()排序后list7依然是list6的拷贝,但list8随着list6顺序的变化而变化,所以不可以偷懒,要拷贝一个列表请用分片的方式
    即直接用=就是多了一个指向的标签
    在这里插入图片描述

  • 在Python中,变量不是一个盒子,当赋值运算发生的时候,Python并不是将数据放在变量当中,而是将变量与数据挂钩,我们称之为引用,将一个变量赋值给另一个变量就是将一个变量的引用传递给另一个变量
    在这里插入图片描述

在这里插入图片描述

  • 如果要得到两个独立的列表,还是需要用到拷贝

浅拷贝和深拷贝

浅拷贝

  • 1.调用列表的copy方法,copy方法拷贝的是整个列表对象,而不仅仅是变量的引用
  • 2.使用切片的语法实现
    在这里插入图片描述
    在这里插入图片描述
  • 浅拷贝处理一维列表是没有问题的,但是如果涉及到嵌套列表,就会出现新问题。浅拷贝只是拷贝了外层的对象,如果包含嵌套对象的话,那么拷贝的只是其引用,解决此问题需要用到深拷贝

在这里插入图片描述

深拷贝

  • 深拷贝要借助copy模块,该模块有两个函数,一个是copy,实现的是浅拷贝,另一个是deepcopy
  • deepcopy函数将原对象拷贝的同时,也将对象中所以引用的子对象一并进行了拷贝
    在这里插入图片描述
    在这里插入图片描述

Task

0. 注意,这道题跟上节课的那道题有点儿不同,回答完请上机实验或参考答案

>>> old = [1, 2, 3, 4, 5]
>>> new = old
>>> old = [6]
>>> print(new)

会打印[1,2,3,4,5],此处是赋值,new随着old的变化而变化,上节课是分片拷贝
在这里插入图片描述
1. 请问如何将下边这个列表的’小甲鱼’修改为’小鱿鱼’?

list1 = [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]

用del删除,再用append添加

>>> list1 = [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]
>>> del list1[1][2]
>>> list1[1].append('小鱿鱼')

在这里插入图片描述
小甲鱼的方法更简单:

list1 = [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]
list1[1][2][0] = '小鱿鱼'

2.要对一个列表进行顺序排序,请问使用什么方法?
list1.sort()

3. 要对一个列表进行逆序排序,请问使用什么方法?
list1.sort(reverse=True)
或者;

>>> 列表名.sort()
>>> 列表名.reverse()

4. 列表还有两个内置方法没给大家介绍,不过聪明的你应该可以自己摸索使用的门道吧:copy() 和 clear()
copy()方法和使用切片拷贝是一样的
clear()方法用于清空列表的元素,但要注意,清空列表仍然存在,只是变成一个空列表

5. 你有听说过列表推导式或列表解析吗?

没听过?!没关系,我们现场来学习一下吧,看表达式:

>>> [i*i for i in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

分别打印了0到9各个数的平方,然后还放在列表里边了

列表推导式(List comprehensions)也叫列表解析,灵感取自函数式编程语言 Haskell。Ta 是一个非常有用和灵活的工具,可以用来动态的创建列表,语法如:

[有关A的表达式 for A in B]
例如

>>> list1 = [x**2 for x in range(10)]
>>> list1
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

相当于

list1 = []
for x in range(10):
    list1.append(x**2)

请先在 IDLE 中获得下边列表的结果,并按照上方例子把列表推导式还原出来。

>>> list1 = [(x, y) for x in range(10) for y in range(10) if x%2==0 if y%2!=0]

还原:

>>> list1 = []
>>> for x in range(10):
	if x % 2 == 0:
		for y in range(10):
			if y % 2 != 0:
				list1.append((x,y))

在这里插入图片描述
6. 活学活用:请使用列表推导式补充被小甲鱼不小心涂掉的部分
在这里插入图片描述

list1 = ['1.Just do it','2.一切皆有可能','3.让编程改变世界','4.Impossible is Nothing']
list2 = ["4.阿迪达斯","2.李宁","3.鱼c工作室","1.耐克"]
for x in list1:
    for y in list2:
        if x[0] == y[0]:
            print(y + ":" + x[2:])
list1 = ['1.Just do it','2.一切皆有可能','3.让编程改变世界','4.Impossible is Nothing']
list2 = ["4.阿迪达斯","2.李宁","3.鱼c工作室","1.耐克"]
list3 = [y + ":" + x[2:] for x in list1 for y in list2 if x[0] == y[0]]
for each in list3:
    print(each)

在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值