在FY-Python2301
项目下创建一个名为day07
的文件夹,在day07
下创建一个名为02-列表的比较大小
的代码文件。
list1 = [1, 2, 3]
list2 = [2]
print(list1 > list2)
list3 = [1, 2, 4]
print(list1 < list3)
1、列表比较大小 比较的是列表中元素的大小
2、列表中参与比较大小的元素位置是一一对应的
3、从第一对元素开始比较,直到分出大小;否则,两个列表相等
4、比较大小的元素必须是相同类型数据类型的
list4 = [1, 2]
list5 = ['2']
print(list4 > list5)
练习:比较这两个列表的大小
list6 = [1, 2, 3, 4.897, [3, 4, 5, 6]]
list7 = [1, 2, 3, 4.897, [1, 2, 3, 4]]
print(list6 > list7)
list8 = [1, 2, 3, 4.897, [3, 4, 5, 6]]
list9 = [1, 2, 3, 4.897, [3, 4, 5, 6, 7]]
print(list8 > list9)
列表推导式(列表生成式)----> 作用:更快的一次性生成出有多个元素的列表
----> 表达式:没有限定,只要逻辑、语法符合规定即可。
1、语法:[表达式 for 变量 in 容器]
----> 先for循环执行一次,后表达式执行一次
list1 = [i for i in range(1, 11)]
# 表达式i也可以改为其他的
print(list1)
2、语法:带条件的列表推导式 [表达式 for 变量 in 容器 if 条件]
----> 先执行for循环,再判断if条件,若条件成立,则执行表达式;若条件不成立,不执行表达式
list2 = [i for i in range(1, 11) if i % 2 != 0]
list2 = [y for x in range(1, 10) for y in range(1, x + 1) ]
# 在列表推导式中增加条件判断,表达式拿到的结果就是被添加到列表中的那个元素
print(list2)
3、语法:双重或多重循环 [表达式 for 变量 in 容器 for 变量 in 容器]
---->先执行第一个for循环(主心骨),第一个for循环执行完毕后如果有条件就可以做参数传递,去判断条件是否成立;如果含有多重循环,也可以由第一个for循环来做参数传递,也可以通过再执行第二个for循环,最后执行表达式()
把九九乘法表中的所有公式添加到列表中
list3 = [f'{x} * {y} = {x * y}' for x in range(1, 10) for y in range(1, x + 1)]
# 内层循环依靠x来控制,第一个for循环是行,第二个for循环是列
print(list3)
练习:使用列表推导式生成学生成绩
例如:5人的三科成绩 ----> [[1, 2, 3][3, 4, 5][5, 6, 7][5, 6, 7][7, 8, 9]],大列表是一个成绩表,每个小列表是每个人的成绩,每个小列表中的每个元素是这个人的每科成绩
import random
score = random.randint(0, 100)
# 成绩结构的构造
list4 = [[score, score, score] for _ in range(5)] # 这里for循环是控制次数,所以变量i写成下划线就行了
# 解决重复性的问题
list5 = [[random.randint(0, 100), random.randint(0, 100), random.randint(0, 100)] for _ in range(5)]
# list5中,外层for循环是主心骨,for循环每执行一次,
# 小列表执行一次做简化,把小列表也做成列表推导式的形式
list6 = [[random.randint(0, 100) for _ in range(3)] for _ in range(5)]
print(list6)
# 程序整体从上到下执行,这个列表推导式是从外向内执行,外层的列表推导式执行一次,
# 等于里面的表达式要执行完,里面的表达式开始执行的时候,代表这个for循环要走完3次
在day07
下创建一个名为03-列表的删除
的代码文件。
列表的删除 ----> 下标的变化
例如:有一个长度是10的列表,数组内有10个人名,要求去掉重复的
names = [‘张三’, ‘李四’, ‘大黄’, ‘张三’, ‘张三’, ‘李四’, ‘大黄’, ‘张三’, ‘张三’, ‘李四’] ----> names = [‘张三’, ‘李四’, ‘大黄’]
1、使用列表推导式去重
names = ['张三', '李四', '大黄', '张三', '张三', '李四', '大黄', '张三', '张三', '李四']
res = []
[res.append(i) for i in names if i not in res]
print(res)
2、set ----> set()会自动排序,还要用sort()或者sorted()做处理,还不如直接用字典。后期说到字符串会讲解
names = ['张三', '李四', '大黄', '张三', '张三', '李四', '大黄', '张三', '张三', '李四']
list1 = list(set(names))
print(list1)
print('+++++++----------+++++++------------+++++++')
names = ['张三', '李四', '大黄', '张三', '张三', '李四', '大黄', '张三', '张三', '李四']
newNames = [] # 新建列表
for i in names:
print(i not in newNames)
if i not in newNames: # not in 和 in 为成员运算,判断某个元素是否在容器中,返回True或者False
newNames.append(i)
print(newNames)
names = ['张三', '李四', '大黄', '张三', '张三', '李四', '大黄', '张三', '张三', '李四']
for i in names:
if names.count(i) > 1:
names.remove(i)
print(names)
为什么没删干净,for 循环一开始执行时,获取元素本质其实还是依据下标
张三拿出来,下标为0,张三被删除,李四等后续所有元素下标对应减1
此时for循环进行第二次循环,判断应该获取下标为1的元素,(把李四跳过了,因为此时李四下标为1)此时下标为1的元素为大黄
names = ['张三', '李四', '大黄', '张三', '张三', '李四', '大黄', '张三', '张三', '李四']
# for i in range(-1, -len(names) - 1, -1):
# 是一个左闭右开区间 从右向左删下标还是从右向左数的
# list index out of range
for i in range(len(names)-1, -1, -1):
# 先取下标为9,for又从range里面取下标为8的,会发现不管后面有没有删除元素,range取出来的都是从左向右数的正向下标,我们是从右向左删
if names.count(names[i]) > 1:
del names[i]
# 不能用remove从左向右 可使用pop
print(names)
# 原本长度为10,每删除一个,长度减1,删除后长度变短了,for循环一开始就确定了执行次数,
# range还是照常去得到下标,列表的长度发生改变,导致后续的下标拿不到
names = ['张三', '李四', '大黄', '张三', '张三', '李四', '大黄', '张三', '张三', '李四']
for i in names[:]:
if names.count(i) > 1:
names.remove(i)
print(names)
判断元素个数有一个很好的点就是,while循环每次都会重新去判断条件是否成立
names = ['张三', '李四', '大黄', '张三', '张三', '李四', '大黄', '张三', '张三', '李四']
x = 0
# x 表示元素下标
while x <= len(names) - 1: # 代表while循环能够正常执行,if x >= len(names)循环结束
if names.count(names[x]) > 1: # 通过下标获取元素,判断这个元素出现的次数是否大于1
del names[x] # 如果次数大于1 ,根据x将这个元素删掉,然后就不要动了
else: # 如果这个元素不重复
x += 1 # 如果这个元素重复了,把这个元素删掉后,下标不变(列表中被删除点往后的所有元素下标减1)
print(names)
例如: A = [1, ‘a’, 4, 90] B = [‘a’, 8, ‘j’, 1] --> C = [1, ‘a’]
C = []
A = [1, 'a', 4, 90]
B = ['a', 8, 'j', 1]
for i in A:
for j in B:
if i == j:
C.append(i)
print(C)
print('-------------------------------------')
C1 = []
A = [1, 'a', 4, 90]
B = ['a', 8, 'j', 1]
for i in A:
if i in B:
C1.append(i)
print(C1)