一.列表相关操作
1.数学运算符: + *
print([10,20]+[20,30]) #[10,20,20,30],原变量不会变
list1 = [10,20,30]
print(list1 * 2)
print(list1 * 3)
list1.reverse()
print(list1)
2.比较运算符
2.1.比较是否相等: == , !=
print([10,20,30] == [10,20,30])
print([10,20,30] != [10,30,20])
2.2 也可以和其他数据类型比较是否相等
print([10, 20] == '10,20') #False
print([10] == '10') #False
print([10] == 10) #False
2.3比较相等 #比较的的是第一队不相等的元素的大小
print([100,200,300,400] > [101,201])
print([1,2,30000,4000] < [1,3,-23445])
# 如果有字符串比较大小会报错
print(['psd'] < ['qwer']) # True 跟第一个字母的顺序有关
3. in 和 not in
元素 in 列表 -是否存在元素
元素 not in 列表
print(10 in [10,20,30]) # TRUE
print([10,20] in [10,20,30]) # FALSE
练习题:去重
自己解法: (这个解法的出错很容易在list的范围上面)
j = 0
names = ['张三','李四','张三','王五','李四','张三','张三','张三','王五']
for i in range(len(names)-1):
print(i)
j = i + 1
while j <= (len(names)-1):
if names[i] == names[j]:
del names[j]
else:
j += 1
print('weise',names)
解法1: (此解法是用添加空列表,判断后用append函数加入)
newnames = []
for x in names:
if x not in newnames:
newnames.append(x)
print(newnames)
解法二: (此解法是用pop能够删除并返回值所以,把原列表删除完,再把筛选的在Insert函数进去)
names = ['张三','李四','张三','王五','李四','张三']
for _ in range(len(names)):
last_name = names.pop()
if last_name not in names:
names.insert(0,last_name)
print(names)
二.列表相关函数
1. sum(序列) - 求数字序列中所有元素的和
scores =[19, 23, 89 , 90, 99 ,83]
print(sum(scores))
print(sum(range(1,101)))
2.
max(序列) - 求序列中最大的元素
min(序列) - 求序列中最小的元素
print(max(scores))
print(min(scores))
3.
sorted(序列) - 将序列中的元素从小到大排序,产生一个新的列表
sorted(序列,reverse = True) -从大到小,产生一个新的序列
scores =[19, 23, 89 , 90, 99 ,83]
new_scores = sorted(scores)
print(new_scores) #[19, 23, 83, 89, 90, 99]
new_scores = sorted(scores, reverse=True)
print(new_scores) #[99, 90, 89, 83, 23, 19]
4. len(序列) - 获取序列中元素的个数
5. list(序列) - 将指定的序列转换成列表,将序列中的元素最为列表的元素
- 所有元素都可以转换成列表
list1 = list('abc123')
print(list1) #['a', 'b', 'c', '1', '2', '3']
list2 =list(range(3))
print(list2) #[0, 1, 2]
三.列表相关方法
1. 列表.clear() - 清空列表
numbers= [1,2,3,4]
numbers.clear()
print(numbers) #[]
2. 列表.copy() - 复制原列表,产生一个一模一样的新列表
- 注意地址问题,copy后地址与原函数地址不一样
nums = [1,0,111,123]
new_nums1 = nums.copy()
new_nums2 = nums
print('new_nums', new_nums1)
nums.append(100)
print(new_nums2, new_nums1)
3. 列表.count -统计指定元素的个数
print(nums.count(1))
4. 列表.extend(序列) - 序列中的元素全部添加到列表的最后
nums = [1,2,3,4]
nums.extend(['abc',111])
print(nums) #[1, 2, 3, 4, 'abc', 111]
nums = [1,2,3,4]
nums.extend('abc')
print(nums) #[1, 2, 3, 4, 'a', 'b', 'c']
5 . 列表.index[元素] - 获取指定元素列表中的下标值(标志的下标值,从0开始的那个下标)
army = [3,3,3,8,9,10,11,12,13,15,3]
print(army.index(3)) # 0
print(army.index(13)) # 8
# 不是里面的元素会报错
6. 列表.reverse() - 将列表中的元素逆序
army.reverse()
print(army) #[3, 15, 13, 12, 11, 10, 9, 8, 3, 3, 3]
print(army[ : :-1]) #[3, 3, 3, 8, 9, 10, 11, 12, 13, 15, 3],不会修改原列表的值
7 .
列表.sort() - 从小到大
列表.sort(reverse=True) - 从大到小
sorted(序列) #不会改变原来序列的值
sorted(序列,reverse=True)
army .sort()
print(army) #[3, 3, 3, 3, 8, 9, 10, 11, 12, 13, 15]
print(sorted(army,reverse=True),army) #[15, 13, 12, 11, 10, 9, 8, 3, 3, 3, 3] [3, 3, 3, 3, 8, 9, 10, 11, 12, 13, 15]
四.列表推导式
1 . 列表推导式 - 一种创建列表的快捷表达式
结构1:
[表达式 for 变量 in 序列]
功能: 创建一个列表,列表中的元素是表达式的结果 -让变量取序列中取值,一个一个的取,每取一个值就计算依次表达式的结果
应用: 将原序列中所有的元素,经过统一的变换,转换成新的列表
例子:
list1 = [10 for x in 'abc']
print(list1) #[10, 10, 10]
list1 = [x for x in range(3)]
print(list1) #[0, 1, 2]
list2 = [x*2 for x in range(3)]
print(list2) #[0, 2, 4]
list2 = [x % 2 == 0 for x in range(5)]
print(list2) #[True, False, True, False, True]
练习::提取个位数并乘10
nums = [23,78,562,98,71,99]
list1 =[x%10 for x in nums[:]] #[3, 8, 2, 8, 1, 9]
list2 = [x*10 for x in list1[:]] #[30, 80, 20, 80, 10, 90]
print(list1,list2)
list3 = [x*10 for x in nums[:]]
print(list3) #[230, 780, 5620, 980, 710, 990]
money =[1215451,130000,67777,999988,453335]
newmoney = [f'{x/10000:.2f}万 ' for x in money] #F' ' 一种字符串写法
print(newmoney)
结构2:
[表达式 for 变量 in 序列 if 条件语句]
功能: 创建一个列表,列表中的元素是表达式的结果 -判断为True 才会判断结果
应用:提取序列中满足某个某个条件的所有元素
例子:
list1 = [x for x in range(5) if x% 2 ==0]
print(list1) #[0, 2, 4]
nums = [23,89,67,21,78,20]
list2 = [x for x in nums if x %10 <5]
print(list2) #[23, 21, 20]
#练习: 用推到删除scores小于60的元素
scores = [30,56,78,91,83,88,45,57,60]
newscores = [x for x in scores if x>=60]
print(newscores) #[78, 91, 83, 88, 60]
# 练习: 将scores 中元素全部变成'及格'或者'不及格'
scores = [30,56,78,91,45,57,60]
scores1 = [' '] *len(scores)
j = 0
for i in range(len(scores)):
if scores[i] >= 60:
j = '及格'
scores1[i] = j
else:
j ='不及格'
scores1[i]= j
print(scores1)
# 法2:
newscores = ['及格' if x >= 60 else '不及格' for x in scores]
print(newscores)
补充:python的三目运算- if - else
1) 值1 if 条件语句 else 值2 -如果条件为真,整个表达式结果值为1,否则结果是值2
# 例子:
age = 90
result = '成年' if age >= 18 else '未成年'
print(result)