day 7 列表和元组知识点总结
1、列表相关操作和相关函数
1、列表相关操作
1、数学运算符:+、*
1、列表1 + 列表2 - 将两个列表合并成一个新的列表
list1 = [10, 20, 30]
list2 = [100, 200]
result = list1 + list2
print(result) # [10, 20, 30, 100, 200]
2、列表 * N 、 N * 列表 - 将列表中的元素重复N次产生一个新的列表
list3 = [10, 20, 30]
print(list3 * 3) # [10, 20, 30, 10, 20, 30, 10, 20, 30]
2、比较运算:>、<、>=、<=、==、!=
1、比较相等:==、!=
list1 = [10, 20, 30]
list2 = [100, 200]
print(list1 == [10, 20, 30]) # True
print(list2 == [20, 10, 30]) # False
2、>、<、>=、<= :两个列表比较大小,比较的是第一对不相等的元素的大小
list1 = [10, 20, 30]
list2 = [1, 1000, 2000, 3000]
print(list1 > list2) # True
list1 = [1, 2, 3]
list2 = [1, 2, 3, 4]
print(list2 > list1) # False
3、in 和 not in
# 元素 in 列表 - 判断指定列表中是否存在指定元素
# 元素 not in 列表 - 判断指定列表中是否不存在指定元素
print(10 in [10, 20, 30]) # True
print(100 not in [10, 20, 30]) # True
print([10, 20] in [10, 20, 30]) # False
2、相关函数(系统函数) : sum、max、min、len、sorted、list
1、sum(列表) - 求列表中所有元素的和(列表必须是数字列表)
scores = [18, 34, 57, 99]
print(sum(scores))
# 求1+2+3+...+100
print(sum(range(1, 101)))
2、max(列表)/min(列表) - 求列表中所有元素的最大值/最小值
scores = [18, 34, 57, 99]
print(max(scores))
print(min(scores))
3、sorted
# sorted(列表) - 将列表中的元素从小到大排序,产生一个新列表
# sorted(列表, reverse=True) - 将列表中的元素从大到小排序,产生一个新列表
scores = [18, 84, 34, 57, 13, 99]
nem_scores = sorted(scores)
print(nem_scores)
scores = [18, 84, 34, 57, 13, 99]
nem_scores = sorted(scores, reverse=True)
print(nem_scores)
4、list - 将其他数据转换成列表
# list(数据) - 将指定数据转换成列表;所有的序列都可以转换成列表;将其他序列转换成列表的时候直接将序列的元素作为列表的元素
result = list('abc')
print(result) # ['a', 'b', 'c']
result = list(range(5))
print(result)
2、列表相关方法 - 方法使用的套路:列表.xxx()
1、clear - 列表.clear() - 清空列表
nums = [1, 2, 3, 4, 5]
nums.clear()
print(nums) # []
2、copy - 列表.copy() :复制指定列表产生一个一样的新列表,然后将新列表返回
# 直接用一个变量给另一个变量赋值,赋的是地址,赋值后会导致两个变量同时指向同一块内存区域
# 列表[:]、列表 * 1、列表 + []的功能和列表.copy()的功能一样
nums = [1, 2, 3, 4, 5]
nums2 = nums.copy()
print(nums2)
list1 = [10, 20, 30]
list2 = list1
list3 = list1.copy()
print(list1[:])
print(list1 * 1)
print(list1 + [])
list1.append(40)
print(list2)
print(list3)
3、count - 列表.count(元素) :统计列表中指定元素的个数
4、extend - 列表.extend(序列) :将序列中所有的元素都添加到列表里
list1 = [10, 20, 30]
list1.extend([100, 200])
print(list1) # [10, 20, 30, 100, 200]
list1 = [10, 20, 30]
list1.extend(['abc'])
print(list1) # [10, 20, 30, 'abc']
list1 = [10, 20, 30]
list1.extend(['abc', 'ecf'])
print(list1) # [10, 20, 30, 'abc', 'ecf']
5、index - 列表.index(元素) : 获取元素在列表中对应的下标(返回的是0开始的那个下标值)
# a.如果元素不存在则会报错
# b.如果元素有多个,只返回最前面那个元素的下标
list1 = [12, 34, 56, 89, 34, 9]
print(list1.index(34))
6、reverse - 列表.reverse()
list1 = [12, 34, 56, 89, 34, 9]
list1.reverse()
print(list1) # [9, 34, 89, 56, 34, 12]
7、sort
# 列表.sort - 将列表的元素从小到大排序
# 列表.sort(reverse=True) - 将列表从大到小排序
# 列表.sorted - 将列表的元素从小到大排序,产生一个新列表
# 列表.sorted(reverse=True) - 将列表的元素从大到小排序,产生一个新列表
3、列表推导式 - 创建列表的表达式,主要用于对元素进行变换和筛选
"""
结构1:
[表达式 for 变量 in 序列]
原理:创建一个列表(让变量去序列中取值,一个一个的取,取一次就计算依次表达式的结果并且将计算结果作为列表的一个元素)
作用:将原序列中的元素按照指定的规则(表达式)进行统一变换得到一个列表
结构2:
[表达式 for 变量 in 序列 if 条件语句]
原理:让变量取去序列中取值,一个一个的取,取一个值就判断一次条件语句是否成立,如果成立才计算表达式,并将结果作为列表的元素
作用:提取序列中满足条件的元素
"""
# 练习1:将nums中所有的元素乘2,转换成一个新的列表:[56, 20, 162, 602, 44]
nums = [28, 10, 81, 301, 22]
result = [x * 2 for x in nums]
print(result)
# 练习2:基于nums得到[8, 0, 1, 1, 2]
nums = [28, 10, 81, 301, 22]
result = [x % 10 for x in nums]
print(result)
# 练习3: 基于nums得到[10, 1, 9, 4, 4]
nums = [28, 10, 81, 301, 22]
result = [x % 10 + x // 10 % 10 + x // 100 for x in nums]
print(result)
# 练习4: 基于nums得到 [True, True, False, False, True]
nums = [28, 10, 81, 301, 22]
result = [x % 2 == 0 for x in nums]
print(result)
# # 练习5:基于nums得到: [81, 301]
nums = [28, 10, 81, 301, 22]
result = [x for x in nums if x % 2]
print(result)
# 练习6:基于list1,得到 [10, 20]
list1 = [10, '12.3', 1.23, 20, 'abc', True]
result = [x for x in list1 if type(x) == int]
print(result)
# 练习7:已知一个分数列表,提取列表中所有及格分数 (删除不及格)
# [89, 67, 90, 89]
scores = [18, 89, 67, 90, 45, 34, 12, 89]
result = [x for x in scores if x >= 60]
print(result)
4、认识元组
1.认识元组(tuple)
# 是容器;将()作为容器的标志里面多个元素用逗号隔开:(元素1,元素2,元素3...)
# 不可变的(不支持增删改操作);有序的
# 单个元素的元组(重要!!!!!!!!):必须在唯一的元素后加逗号
t1 = (20,)
print(t1, type(t1))
2、元组就是不可变的列表
# 列表中和增删改无关的操作元组都支持
# 1)查
names = ('奥特曼', '开端', '甄嬛传', '人民的名义', '康熙王朝', '琅琊榜', '庆余年')
print(names[1], names[-1])
print(names[1:-1:-1]) # ()
print(names[1:-1:2]) # ('开端', '人民的名义', '琅琊榜')
print(names[2:]) # ('甄嬛传', '人民的名义', '康熙王朝', '琅琊榜', '庆余年')
for x in names:
print(x)
for index in range(len(names)):
print(index, names[index])
for index,item in enumerate(names):
print(index, item)
# 2)相关操作全部支持
print((10, 20) + (100, 200)) # (10, 20, 100, 200)
print((10, 20) * 3) # (10, 20, 10, 20, 10, 20)
print((10, 20) == (20, 10)) # False
print(10 in (10, 20, 30)) # True
# 3) 相关函数:sum、max、min、len、sorted
# 4) 部分相关方法:count、index
3、元组不只是不可变的列表
# 1)单个元素的元组:(元素,)
# 2)在没有歧义的情况下,元组的()可以省略
t1 = (10, 20, 30)
t2 = 10, 20, 30
print(t1, t2) # (10, 20, 30) (10, 20, 30)
# 3)获取元素的时候,可以让变量的个数和元组中元素个数一致
t2 = (10, 20, 30)
x, y, z = t2
print(x, y, z)
作业
- 创建一个列表,列表中有10个数字, 保证列表中元素的顺序,对列表进行排重,并对列表使用进行降序排序
例如:[70, 88, 91, 70, 107, 234, 91, 177, 282, 197]
--- 去重之后 [70, 88, 91, 107, 234, 177, 282, 197]
---- 降序排序 [282, 234, 197, 177, 107, 91, 88, 70]
nums = [70, 88, 91, 70, 107, 234, 91, 177, 282, 197]
for _ in range(len(nums)):
x = nums.pop()
if x not in nums:
nums.insert(0, x)
print(sorted(nums))
print(sorted(nums, reverse=True))
2、利用列表推导式, 完成以下需求
a. 生成一个存放1-100中各位数为3的数据列表
结果为 [3, 13, 23, 33, 43, 53, 63, 73, 83, 93]
result = [x for x in range(1, 101) if x % 10 == 3]
print(result)
b. 利用列表推导式将 列表中的整数提取出来
例如:[True, 17, "hello", "bye", 98, 34, 21] --- [17, 98, 34, 21]
list1 = [True, 17, "hello", "bye", 98, 34, 21]
result = [x for x in list1 if type(x) == int]
print(result)
c.利用列表推导式 存放指定列表中字符串的长度
例如: ["good", "nice", "see you", "bye"] --- [4, 4, 7, 3]
list2 = ["good", "nice", "see you", "bye"]
result = [len(x) for x in list2]
print(result)
d. 利用列表推导式删除列表中整数个位数小于5的元素
例如:[24, 'abc', 99, True, 21, 38, 'hello'] --- ['abc', 99, True, 38, 'hello']
list3 = [24, 'abc', 99, True, 21, 38, 'hello']
result = [x for x in list3 if type(x) != int or x % 10 >= 5]
print(result)
e. 利用列表推导式获取元素是元组的列表中每个元组的最后一个元素
例如:[(10, 20, 30), ('abc', 'hello'), (1, 2, 3.4), (True, False)] --- [30, 'hello', 3.4, False]
list4 = [(10, 20, 30), ('abc', 'hello'), (1, 2, 3.4), (True, False)]
result = [x[-1] for x in list4 if type(x) == tuple]
print(result)
f.利用列表推导式将数字列表中所有的奇数乘以2,所有的偶数除以2
例如: [23, 4, 67, 88, 90, 21] -> [46, 2, 134, 44, 45, 42]
list5 = [23, 4, 67, 88, 90, 21]
result = [x * 2 if x % 2 else int(x ** 1/2) for x in list5 ]
print(result)
-
已知一个列表获取列表中指定元素所有的下标
例如:[10, 20, 34, 10, 9, 78] 10的下标:[0, 3] 20的下标:[1] 30的下标:[]
list6 = [10, 20, 34, 10, 9, 78] for x in list6: new_list6 = list6[list6.index(x) + 1:] if x in new_list6: print(x, '的下标是:', [list6.index(x), new_list6.index(x)+1]) else: print(x, '的下标是:', [list6.index(x)])
-
*已知一个数字列表,写程序判断这个列表时候是连续递增列表。
例如: [1, 2, 3, 4, 5] -> True [23, 45, 78, 90] -> True [1, 3, 2, 4, 5] -> False
list7 = [1, 2, 3, 4, 5] new_list7 = sorted(list7) if list7 == new_list7: print(True) else: print(False)
-
已知两个列表,将两个列表按照下面的规律交叉合并
A = [10, 20, 30, 40, 50] B = [100, 200, 300] 结果:[10, 100, 20, 200, 30, 300, 40, 50]
A = [10, 20, 30, 40, 50] B = [100, 200, 300] result = [] while A and B: i1 = A.pop(0) result.append(i1) i2 = B.pop(0) result.append(i2) for x in A: result.append(x) for x in B: result.append(x) print(result)
-
已知两个有序列表,将两个列表合并,合并后的新列表中元素仍然是递增列表
A = [10, 20, 30, 40, 50] B = [25, 44, 60] 结果:[10, 20, 25, 30, 40, 45, 50, 60]
A = [10, 20, 30, 40, 50] B = [25, 44, 60] result = A + B print(sorted(result))