列表的运算
-
列表的重复
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可执行文件