day 7列表和列表推导式
1、列表相关运算符
1.1数学运算符+、*
1.1.1 +
- 列表1+列表2——功能:将两个列表中的元素合并产生一个新的列表
- 不影响原列表
list1 = [100, 200, 300]
list2 = [10, 20]
print(list1 + list2) # [100, 200, 300, 10, 20]
1.1.2 *
- 列表*N
- N*列表
- N个列表相加——列表中的元素重复N次,产生一个新的列表
print(list2 * 3) # [10, 20, 10, 20, 10, 20]
print(list1 * 1) # 产生一个新的和原来一样的列表
1.2比较运算符
- 补充:不同的类型可以使用==和!=来比较是否相等,但是不能用>、<、>=、<=来比较大小
- 1)==、!= ——顺序影响结果
print([10, 20, 30] == [10, 20, 30]) # True
print([10, 20, 30] == [10, 30, 20]) # False
- 2)>、<、>=、<=
- 两个列表比较大小——比较的是第一对不相等的元素(下标相同)
print([10, 200, 300, 40] > [20, 1]) # False
print([10, 200, 300, 40] > [10, 20, 1, 100000]) # True
print([10, 20, 30] > [10, 20]) # True
2、列表相关函数
2.1max、min
- max(序列)——获取序列中最大的元素
- min(序列)——获取序列中最小的元素
- 注意:序列本身可以比较大小
nums = [10, 69, 98, 23, 45, 90, 100]
print(max(nums)) # 100
print(min(nums)) # 10
2.2 sum
- sum(数字序列)——求序列中所有元素的和
sum(range(101)) # 0+1+2......+100
2.3 sorted——排序
- sorted(序列)——将序列中的元素按照从小打到大排序,产生一个新的列表
- sorted(序列,reverse=True)——将序列中的元素从大到小排序,产生一个新的列表
nums = [10, 69, 98, 23, 45, 90, 100]
new_nums = sorted(nums)
print(new_nums) # [10, 23, 45, 69, 90, 98, 100]
nums = [10, 69, 98, 23, 45, 90, 100]
new_nums = sorted(nums, reverse=True)
print(new_nums) # [100, 98, 90, 69, 45, 23, 10]
2.4 len
- len(序列)——获取序列中元素的个数
print(len([10, 20, 30])) # 3
print(len('abcvn')) # 5
print(len(range(90))) # 90
2.5list
- list(序列)——所有的序列都可以转化成列表
- 功能:将序列的元素作为列表的元素创建一个新的列表
print(list('abcdfg')) # ['a', 'b', 'c', 'd', 'f', 'g']
print(list(range(3))) # [0, 1, 2]
3、列表相关方法
- 列表.append(元素)
- 列表.insert(下标,元素)
- 列表.remove(元素)
- 列表.pop(元素)
3.1 列表.clear()——清空列表
nums = [10, 20, 30]
nums.clear()
print(nums) #[]
3.2列表.copy()——复制列表产生一个一模一样新的列表
- 列表.copy()——浅拷贝
- 列表[:]、列表*1、列表=[]——都是浅拷贝
nums = [10, 20, 30]
new_nums1 = nums.copy()
print(new_nums1) # [10, 20, 30]
new_nums3 = nums[:]
print(new_nums3) # [10, 20, 30]
- 变量保存数据时候保存的其实是数据在内存中的地址。一个变量直接给另一个变量赋值,赋的是地址
new_nums2 = nums
print('nums', id(nums)) # 2464425382080
print('new_nums1', id(new_nums1)) # 2464425065920
print('new_nums2', id(new_nums2)) # 2464425382080
3.3列表.count(元素)——统计列表中指定元素的个数
nums = [10, 20, 30, 40, 10, 20, 56, 10]
print(nums.count(10)) # 3
c = nums.count(10)
print(c) # 3
print(nums.count(100)) # 0
3.4列表.extend(序列)——将序列中的元素全部添加到列表中
- 序列的‘ABC’,包含A,B,C三个
nums = [100, 200, 300, 5]
nums.append([10, 20])
print(nums) # [100, 200, 300, 5, [10, 20]]
nums.extend([10, 20])
print(nums) # [100, 200, 300, 5, [10, 20], 10, 20]
nums.extend('abc')
print(nums) # [100, 200, 300, 5, [10, 20], 10, 20, 'a', 'b', 'c']
nums.append('abc')
print(nums) # [100, 200, 300, 5, [10, 20], 10, 20, 'a', 'b', 'c', 'abc']
3.5列表.index(元素)——获取元素在列表中的下标值(0开始的下标值)
- 如果元素有多个,返回第一个的下标;如果元素不存在,就会报错
nums = [100, 200, 300, 5, 10, 20, 10, 'b', 'c', 'abc']
print(nums.index(300)) # 2
result = nums.index(20)
print(result) # 5
print(nums.index(10)) # 4——第一次出现的位置
3.6列表.reverse()——列表逆序
- [::-1]——逆序的方法
nums = [10, 20, 30, 40]
nums.reverse() # 不产生结果
print(nums)
3.7 排序
- 列表.sort() / 列表.sort(reverse=True) ——不产生结果
- sorted(列表) / sorted(列表,reverse=True) ——产生结果
nums = [119, 30, 25, 90]
result = sorted(nums)
print(result) # [25, 30, 90, 119]
nums.sort()
print(nums) # [25, 30, 90, 119]
4、列表推导式——快速创建列表的表达式
4.1 推导式结构一
-
语法:
[表达式 for 变量 in 序列]
—— 让变量去序列中取值,一个一个的取,取完为止,每取一个值,就将表达式的值作为列表的一个元素(创建一个列表)
list1 = [10 for x in 'abc']
print(list1) # [10, 10, 10]
list2 = [x * 2 for x in range(5, 11)]
print(list2) # [10, 12, 14, 16, 18, 20]
-
# 练习:使用推导式获取nums中所有元素的个位数 nums = [23, 89, 90, 56, 41, 802] ge_wei = [x % 10 for x in nums] print(ge_wei) # 练习2:是用列表推导式将nums中所有的元素乘以10 # [230, 890, 900, 560, 410, 8020] nums = [23, 89, 90, 56, 41, 802] new_nums = [x * 10 for x in nums] print(new_nums) # 练习3:已知分数列表,将列表中的元素全部换成'及格' - True 或者'不及格'-False # ['及格', '及格', '不及格', '及格', '不及格', '及格'] # [True, True, False, True, False, True] scores = [90, 78, 45, 67, 39, 89] new_scores = [x >= 60 for x in scores] print(new_scores) # [True, True, False, True, False, True] # ['及格', '及格', '不及格', '及格', '不及格', '及格'] scores = [90, 78, 45, 67, 39, 89] result = ['及格' if x >= 60 else '不及格' for x in scores] print(result) # ['及格', '及格', '不及格', '及格', '不及格', '及格'] # 练习4:已知一个数字列表,将列表中所有的偶数除以2,所有的奇数乘以2 # [46, 178, 45, 28, 82, 401] nums = [23, 89, 90, 56, 41, 802] result = [x // 2 if x % 2 == 0 else x * 2 for x in nums] print(result) # [46, 178, 45, 28, 82, 401]
4.2列表推导式结构2
-
语法:
[表达式 for 变量 in 序列 if 条件语句]
功能:创建一个列表
变量去序列中取值,一个一个的取,取完为止,每取一个值就判断条件语句是否为True,如果为True就计算表达式的结果
result = [x for x in range(10, 20) if x % 2]
print(result) # [11, 13, 15, 17, 19]
# 练习1:使用列表推导式提取nums中所有的奇数
# [23, 89, 41]
print('=========================1==============')
nums = [23, 89, 90, 56, 41, 802]
result = [x for x in nums if x % 2]
print(result) # [23, 89, 41]
print('=========================2==============')
# 练习2:已知一个列表,提取列表中所有的字符串
list1 = [10, 23.9, 'hello', True, '12', 0]
result = [x for x in list1 if type(x) == str]
print(result) # ['hello', '12']
print('=========================3==============')
# 练习3:已知一个列表,提取列表中所有的整数,并且将整数加3
# [13, 3]
list1 = [10, 23.9, 'hello', True, '12', 0]
result = [x + 3 for x in list1 if type(x) == int]
print(result) # [13, 3]
5、补充三目运算符
-
语法:
值2 if 表达式 else 值2——如果表达式的值为True结果就是值1,否则就是值2
-
例子
age = 18
result = '成年' if age >= 18 else '未成年'
print(result) # 成年
a = 2
b = 3
result = a if a > b else b
print(result) # 3
6、元组——不可变的列表
- 查、in和not in、数学运算、比较运算、相关函数—— 元组都支持
6.1什么是元组(tuple)
-
(元素1,元素2,元素3,…)
-
不可变得;有序
-
空元组
t1 = ()
print(t1, type(t1)) #() <class 'tuple'>
- 有一个元素的元组
t2 = (10) #t2=(10,)
print(t2, type(t2)) #10 <class 'int'>