Day 07
一、列表的相关函数
1. 列表的比较运算:==、!=、 >、<、>=、<=
- a. 列表的比较运算:==、!=、 >、<、>=、<=
print(10 == 'abc') # False
print([10, 20, 30] == [10, 20, 30]) #True
print([10, 20, 30] == [10, 30, 20]) # False
print([10, 20] == 'abc') # False
- b. >、<、>=、<=
- 注意:列表比较大小,只能是两个列表进行比较
- 比较规则:比较第一对不相等的元素的大小(相同位置的元素是一对儿)
print([10, 2000, 30992, 42220, 522340] > [100, 1]) # False
print([10, 20, 30] > [10, 2, 300]) #True
# print([10, 'abc', 20, 30] > [10, 23, 9]) 非同类型无法比较
2. 列表(序列)相关函数
- a. sum(列表) - 求列表中所有元素的数值和(列表中元素必须是数字)
scores = [100, 19, 34, 89, 67, 34, 99]
print(sum(scores)) # 442
print(sum(range(1, 101))) # 5050
- b. max、min
- max(列表) - 获取列表中的最大元素(列表中的元素支持比较运算)
- min(列表) - 获取列表中的最小元素(列表中的元素支持比较运算)
scores = [100, 19, 34, 89, 67, 34, 99]
print(max(scores)) # 100
print(min(scores)) # 19
-
c. 排序函数
-
sorted(列表) - 将列表中的元素从小到大排序,产生一个新的列表
-
sorted(列表, reverse=True) - 将列表中的元素从大到小排序,产生一个新的列表
scores = [100, 19, 34, 89, 67, 34, 99]
scores = sorted(scores)
print(scores) # [100, 19, 34, 89, 67, 34, 99]
new_scores = sorted(scores, reverse=True)
print(new_scores) # [100, 99, 89, 67, 34, 34, 19]
- d. len(列表) - 统计列表中元素的个数
scores = [100, 19, 34, 89, 67, 34, 99]
print(len(scores) ) # 7
- e. list(序列) - 将指定序列转换成列表
- 任何序列都可以转换成列表,转换的时候直接将序列中的元素作为列表的元素
print(list('abc')) # ['a', 'b', 'c']
print(list(range(10, 15))) # [10, 11, 12, 13, 14]
二、列表的相关方法
1.列表.clear() - 清空列表
nums = [20, 89, 23]
print(nums) # [20, 89, 23]
nums.clear()
print(nums) # []
2.列表.copy() - 拷贝(浅拷贝)原列表产生一个一模一样的新列表,将新列表返回
-
用变量保存数据的时候,变量真正保存的其实是数据在内存中的地址;
-
当用一个变量直接给另外一个变量赋值的时候,赋的其实是变量中保存地址,赋值后两个变量指向的是同一块内存。
a = [20, 89, 23]
b = a
c = a.copy() # 列表[:]、列表*1、列表+[] 都是浅拷贝
print('a:', a)
print('b:', b)
print('c:', c)
'''
a: [20, 89, 23]
b: [20, 89, 23]
c: [20, 89, 23]
'''
a.append(100)
print('a:', a)
print('b:', b)
print('c:', c)
'''
a: [20, 89, 23, 100]
b: [20, 89, 23, 100]
c: [20, 89, 23]
'''
3.列表.count(数据) - 统计列表中指定数据出现的次数(数据的个数)
nums = [10, 34, 45, 90, 10, 45, 45, 78, 45]
print(nums.count(10)) # 2
print(nums.count(45)) # 4
print(nums.count(100)) # 0
4.列表.extend(序列) - 将序列中所有的元素全部添加到列表的最后
nums = [10, 20, 30]
nums.extend('abc')
print(nums) # [10, 20, 30, 'a', 'b', 'c']
nums = [10, 20, 30]
nums.extend([100, 200])
print(nums) # [10, 20, 30, 100, 200]
5.列表.index(数据) - 获取指定数据在列表中的第一个下标(如果数据不存在会报错)
nums = [10, 34, 45, 90, 10, 45, 45, 78, 45]
print(nums.index(34)) # 1
print(nums.index(45)) # 2
# print(nums.index(100)) # 报错!
6.列表.reverse() - 列表倒序
nums = [10, 34, 45, 90, 10, 45, 45, 78, 45]
nums.reverse()
print(nums) # [45, 78, 45, 45, 10, 90, 45, 34, 10]
7.列表.sort()、sorted(序列)
- 列表.sort() - 将列表中的元素升序排序(直接修改原列表元素的顺序,不会产生新的列表)
- 列表.sort(reverse=True)
- sorted(序列) - 将序列中的元素升序排序(不会修改原序列中元素的顺序,会产生一个新的列表)
- sorted(序列, reverse=True)
nums = [10, 34, 45, 90, 10, 45, 45, 78, 45]
nums.sort()
print(nums) # [10, 10, 34, 45, 45, 45, 45, 78, 90]
nums = [10, 34, 45, 90, 10, 45, 45, 78, 45]
new_nums = sorted(nums)
print(new_nums) # [10, 10, 34, 45, 45, 45, 45, 78, 90]
练习题
- 创建一个列表,列表中有10个数字, 保证列表中元素的顺序,对列表进行排重,并对列表使用进行降序排序
例如:
nums = [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 i in range(len(nums)-1,-1,-1):
if nums.count(nums[i]) > 1:
del nums[i]
nums.sort(reverse=True)
print(nums)
- 创建一个列表,列表中有10个数字, 保证列表中元素的顺序,对列表进行排重,并对列表使用进行降序排序
a. 生成一个存放1-100中各位数为3的数据列表
结果为 [3, 13, 23, 33, 43, 53, 63, 73, 83, 93]
nums = [i for i in range(3,100,10)]
print(nums)
b. 利用列表推到是将 列表中的整数提取出来
list1 = [True, 17, "hello", "bye", 98, 34, 21]
list2 = [i for i in list1 if type(i) == int]
print(list2
c.利用列表推导式 存放指定列表中字符串的长度
例如: [“good”, “nice”, “see you”, “bye”] — [4, 4, 7, 3]
list1 = ["good", "nice", "see you", "bye"]
list2 = [len(i) for i in list1]
print(list2)
d. 利用列表推导式删除列表中整数个位数小于5的元素
例如:[24, ‘abc’, 99, True, 21, 38, ‘hello’] — [‘abc’, 99, True, 38, ‘hello’]
list1 = [24, 'abc', 99, True, 21, 38, 'hello']
list2 = [i for i in list1 if not (type(i) == int and i % 10 < 5)]
print(list2)
e. 利用列表推导式获取元素是元组的列表中每个元组的最后一个元素
例如:[(10, 20, 30), (‘abc’, ‘hello’), (1, 2, 3.4), (True, False)] — [30, ‘hello’, 3.4, False]
list1 = [(10, 20, 30), ('abc', 'hello'), (1, 2, 3.4), (True, False)]
list2 = [i[-1] for i in list1 ]
print(list2)
f.利用列表推导式将数字列表中所有的奇数乘以2,所有的偶数除以2
例如: [23, 4, 67, 88, 90, 21] -> [46, 2, 134, 44, 45, 42]
nums = [23, 4, 67, 88, 90, 21]
nums2 = [x / 2 if x % 2 == 0 else x * 2 for x in nums]
print(nums2)
- 已知一个列表获取列表中指定元素所有的下标
例如:[10, 20, 34, 10, 9, 78]
10的下标:[0, 3]
20的下标:[1]
30的下标:[]
nums = [10, 20, 34, 10, 9, 78]
num1 = 10
nums = [i for i in range(len(nums)) if nums[i] == num1]
print(nums)
- 已知一个数字列表,写程序判断这个列表时候是连续递增列表。
例如:
[1, 2, 3, 4, 5] -> True
[23, 45, 78, 90] -> True
[1, 3, 2, 4, 5] -> False
nums1 = [1, 2, 7, 4, 5]
print(nums1 == sorted(nums1))
- 已知两个列表,将两个列表按照下面的规律交叉合并
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]
C = []
while True:
C.append(A.pop(0))
C.append(B.pop(0))
if A == [] or B == []:
break
C.extend(A+B)
print(C)
- 已知两个有序列表,将两个列表合并,合并后的新列表中元素仍然是递增列表
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]
print(sorted(A + B))