列表的运算
-
列表的重复
list1 = [1, 2, 3, 4] print(list1 * 10) -
列表的拼接
list2 = [4, 5, 6, 7] print(list1 + list2) -
成员运算:
in、not in成员运算的结果是布尔值
print(3 in [1, 3, 4]) # True print([3] in [1, 3, 4]) # False print([3] in [1, 2, 3, [3]]) # True -
比较大小
- 比较大小的元素必须是同类型的
- 比较大小比较的是第一对不相等元素的大小(容器 序列)
- 数字正常比较大小
list3 = [1, 2, 3, 4] list4 = [1, 2, 4, 5] print(list3 < list4) # True list3 = [1, 2, '3', 4] list4 = [1, 2, '4', 5] print(list3 < list4) # True ASCII list3 = ['1', 2, '3', 4] list4 = [1, 2, '4', 5] # print(list3 < list4) # TypeError: '<' not supported between instances of 'str' and 'int'
练习:有两个列表A和B,使用列表C来获取两个列表中公共的元素
例如: A = [1, 'a', 4, 90] B = ['a', 8, 'j', 1] --> C = [1, 'a']
A = [1, 'a', 4, 90]
B = ['a', 8, 'j', 1]
C = []
for i in A:
if i in B:
C.append(i)
print(C)
列表的方法和函数
-
max、min- 获取同类型数据中最大、最小值num = [1, 2, 3, 4] print(max(num)) print(min(num)) -
count- 统计某个元素出现个数print(num.count(4)) # 1 print(num.count(5)) # 0 -
sum- 求和print(sum(num)) # 10 -
reverse- 将列表倒序,返回值为None,直接修改列表本身(返回值为None,一般都是修改了序列本身)print(num.reverse()) print(num) print(num[::-1]) # 未修改数据本身 -
sorted: 将列表从小到大排序,生成新列表sorted(列表, reverse=False)-> 从小到大排序reverse = True-> 从大到小排序num1 = [23, 78, 0, 90] print(sorted(num1)) print(num1) print(sorted(num1, reverse=True)) print(num1) -
sort: 将列表从小到大排序,修改原列表列表.sort(reverse=False)
列表.sort(reverse=True)print(num1.sort()) print(num1) print(num1.sort(reverse=True)) print(num1) -
extend()- 将一个容器中的每个元素添加到列表中num1.extend('abcdea') num1.extend([1, 2, 3]) print(num1) -
index- 查找元素从左向右查找,找到元素立刻停止,返回下标(只取第一个出现的元素)
index1 = num1.index('a') # 指定从下标为5的位置开始查找 # 如果查找元素不存在,报错 index1 = num1.index('a', 5) print(index1) # 不是同index(),查找第二个a的下标 num1 = [90, 78, 23, 0, 'a', 'b', 'c', 'd', 'e', 'a', 1, 2, 3] a_count = 0 for i in range(len(num1)): if num1[i] == 'a': a_count += 1 if a_count == 2: print(i) break
列表去重
列表,要求去掉重复人名,例如:names = [‘张三’, ‘李四’, ‘大黄’, ‘张三’,‘张三’] -> names = [‘张三’, ‘李四’, ‘大黄’]
names = ['张三', '李四', '大黄', '张三', '张三', '李四', '李四', '李四', '张三', '王五']
for _ in range(len(names) - 1):
a = names.pop(0)
if a not in names:
names.append(a)
print(names)
# 方法一:
name_list = []
for i in names:
if i not in name_list:
name_list.append(i)
print(name_list)
# 方法二:
for i in range(len(names) - 1, -1, -1):
if names.count(names[i]) > 1:
del names[i]
print(names)
# 方法三:
index = 0
while index <= len(names) - 1:
if names.count(names[index]) > 1:
del names[index]
else:
index += 1
print(names)
列表推导式
(列表生成式)
作用:生成一个有元素的列表。
-
语法1:
[表达式 for 变量 in 容器]-for循环每执行一次,表达式就会将其生成的结果添加到列表中。nums = [i for i in range(1, 101)] print(nums) num_2 = [1 for _ in range(10)] print(num_2) -
语法二:
[表达式 for 变量 in 容器 if 条件]-for循环执行一次,if分支判断一次,条件成立是表达式执行。list3 = [i for i in range(1, 101) if i % 2 == 0] print(list3) -
语法三:[表达式 for 变量 in 容器 for 变量 in 容器]
list4 = [i for _ in range(3) for i in range(1, 11)] print(list4)
append()适用于所有向列表中追加元素的操作
列表推导式在某些情况下可以替代append()
性能:列表推导式 > append()
列表推导式和append性能对比:
import time
start = time.time()
list1 = []
for i in range(1, 100000001):
list1.append(i)
end = time.time()
print(f'append方法花费时间{end-start}秒')
start = time.time()
list2 = [i for i in range(1, 100000001)]
end = time.time()
print(f'列表推导式花费时间{end-start}秒')
练习:孪生数:两个素数的差等于2。找出100以内所有的孪生数。
# 方法一:
list1 = []
for i in range(2, 100):
for j in range(2, int((i ** 0.5) + 1)):
if i % j == 0:
break
else:
list1.append(i)
if (i - 2) in list1:
print(f'{i - 2}和{i}是孪生数')
# 方法二:
num1 = [i for i in range(2,100) for j in range(2,i) if i % j == 0]
num2 = [i for i in range(2,101) if i not in num1]
num = [[num2[i],num2[i + 1]] for i in range(len(num2) - 1) if num2[i + 1] - num2[i] == 2]
print('孪生数为:',end = ' ')
for i in num:
print(f'{i[0]}和{i[1]}' , end = ' ')
随机模块
random: 随机模块
俄罗斯轮盘、抽奖等。
import random
-
randint(a, b)-> 从[a, b]闭区间中随机获取一个整数。 -
randrange()-> 约等价于randint + range(左闭右开区间)print(random.randrange(1, 4, 2)) -
choice()-> 从容器中随机获取一个元素choices()-> 从容器中随机获取K个元素,有放回的抽取元素print(random.choice([1, 2, 3, 4])) print(random.choices([1, 2, 3, 4], k=5)) -
sample()-> 从有序容器中无放回的抽取K个元素print(random.sample([1, 2, 3, 4], k=5)) # ValueError: Sample larger than population or is negative -
shuffle()-> 将有序容器随机打乱顺序,无返回值,修改序列本身。print(random.shuffle([1, 2, 3, 4]))
练习:课堂点名器
names = ['王1', '王2', '王3', '王4']
random.shuffle(names)
# 内幕:
while True:
result = random.choices(names, k=1)
if result == ['王2']:
break
print(f'被抽中的同学为:{result}')
- 使用PyQt/wxpython等GUI(图形可视化)进行可视化
- 使用pyinstall将程序封装成windows的exe可执行文件
本文详细介绍了Python列表的各种操作,包括重复、拼接、成员运算、比较大小,以及常用的方法如max、min、count、sum、reverse、sort、extend、index、去重等。此外,还探讨了列表推导式的高效用法,并通过实例展示了如何找出孪生数。最后,讲解了random模块的使用,如randint、randrange、choice、sample和shuffle,以及它们在课堂点名场景中的应用。
793

被折叠的 条评论
为什么被折叠?



