代码:
# 1.列表的重复 list1 = [1, 2, 3, 4] print(list1 * 3)
输出:
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
(二)列表的拼接’+’代码:
# 2.列表的拼接 list2 = [4, 5, 6, 7] print(list1 + list2)
输出:
[1, 2, 3, 4, 4, 5, 6, 7]
(三)列表的成员运算in、not in 结果为布尔值
代码:
# 3.成员运算 in, not in # 成员运算结果为布尔值 print(3 in [1, 3, 4]) print([3] in [1, 3, 4]) print([3] in [1, 2, 3, [3]])
输出:
True
False
True
1.必须为同类型的元素比较大小。
2.比较大小比较的是第一对不相等元素的大小(容器)。
3.数字正常比较大小。
# 4.比较大小 # a.比较大小的元素必须是同类型的 # 不同类型报错:TypeError: '<' not supported between instances of 'str' and 'int' # b.比较大小比较的是第一对不相等元素的大小(容器) # c.数字正常比较大小 list1 = [1, 2, 3, 4] list2 = [1, 2, 4, 5] # list1 = [1, 2, '3', 4] # list2 = [1, 2, '4', 5] # list1 = ['1', 2, '3', 4] # list2 = [1, 2, '4', 5] print(list1 < list2) # TypeError: '<' not supported between instances of 'str' and 'int'
输出:
True
(五)练习代码:
# 练习:有两个列表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)
输出:
[1, ‘a’]
二、列表的方法和函数 (一)max()、min()max()、min():获取同类型数据中最大值、最小值。
代码:
# max、min: 获取同类型数据中最大值、最小值
num = [1,2,3,4]
print('最大值为:', max(num))
print('最小值为:', min(num))
# 不是同类型报错
# TypeError: '>' not supported between instances of 'str' and 'int'
输出结果:
最大值为: 4
最小值为: 1
count():统计某个元素出现个数。
代码:
# count: 统计某个元素出现个数 num = [1,2,3,4] print(num.count(4)) print(num.count(5))
输出结果:
1
0
sum():求和
代码:
# sum: 求和 num = [1,2,3,4] print(sum(num))
输出:
10
(四)reverse()reverse():将列表倒序,返回值为None,直接修改列表本身。
代码:
# reverse: 将列表倒序,返回值为None,直接修改列表本身 num = [1,2,3,4] print(num.reverse()) print(num) # 切片倒序 print(num[::-1])
输出:
None
[4, 3, 2, 1]
[1, 2, 3, 4]
sorted():将列表从小到大排序,生成新的列表。
sorted(列表, reverse = False-默认)->从小到大排序
reverse = True:从大到小排序
sort():将列表从小到大排序,修改原列表。
代码:
# sorted:将列表从小到大排序,生成新的列表 # sorted(列表, reverse = False-默认)->从小到大排序 # reverse = True:从大到小排序 # sort:将列表从小到大排序,修改原列表 num1 = [23, 78, 0, 80] print(sorted(num1)) # 从大到小 print(sorted(num1, reverse=True)) print(num1) print(num1.sort()) print(num1) print(num1.sort(reverse=True)) print(num1)
输出:
[0, 23, 78, 80]
[80, 78, 23, 0]
[23, 78, 0, 80]
None
[0, 23, 78, 80]
None
[80, 78, 23, 0]
extend():将一个容器中的元素添加到列表中。
代码:
# extend(): 将一个容器中的元素添加到列表中
num1 = [80, 78, 23, 0]
num1.extend('abcdea')
num1.extend([1,2,3])
print(num1)
输出:
[80, 78, 23, 0, ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘a’, 1, 2, 3]
(七)index()index():查找元素。
1.从左向右查找,找到元素立刻停止,返回下标。
2.如果查找元素不存在,报错。
代码:
# index:查找元素
# 从左向右查找,找到元素立刻停止,返回下标。
# 如果查找元素不存在,报错。
index1 = num1.index('a')
# print(index1)
# 指定从下标为5的位置开始查找
index1 = num1.index('a', 5)
print(index1)
# ValueError: 'a' is not in list
打印结果:
9
3.不使用index方法查找第二个a的下标。
# 练习:不使用index(), 查找第二个a的下标
num1 = [80, 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 = [‘张三’, ‘李四’, ‘大黄’']
# 方法一:not in
print('方法一:')
names = ['张三', '李四', '大黄', '张三','张三']
name_list = []
for i in names:
if i not in name_list:
name_list.append(i)
print(name_list)
# 方法二:倒着比较
print('方法二:')
names = ['张三', '李四', '大黄', '张三','张三', '李四', '李四']
for i in range(len(names) - 1, -1, -1):
print(i, names)
if names.count(names[i]) > 1:
del names[i]
print(names)
# 方法三:while
print('方法三:')
names = ['张三', '李四', '大黄', '张三','张三', '李四', '李四']
index = 0
while index <= len(names) - 1:
if names.count(names[index]) > 1:
del names[index]
else:
index += 1
print(index)
print(names)
打印结果:
方法一:
[‘张三’, ‘李四’, ‘大黄’]
方法二:
6 [‘张三’, ‘李四’, ‘大黄’, ‘张三’, ‘张三’, ‘李四’, ‘李四’]
5 [‘张三’, ‘李四’, ‘大黄’, ‘张三’, ‘张三’, ‘李四’]
4 [‘张三’, ‘李四’, ‘大黄’, ‘张三’, ‘张三’]
3 [‘张三’, ‘李四’, ‘大黄’, ‘张三’]
2 [‘张三’, ‘李四’, ‘大黄’]
1 [‘张三’, ‘李四’, ‘大黄’]
0 [‘张三’, ‘李四’, ‘大黄’]
[‘张三’, ‘李四’, ‘大黄’]
方法三:
3
[‘大黄’, ‘张三’, ‘李四’]
生成一个有元素的列表。
append()适用于所有向列表中追加元素的操作。
列表推导式在某些情况下可以替代append()
性能:列表推导式 > append()
代码:
# 列表推导式和append性能对比:
import time
start = time.time()
list1 = []
for i in range(1, 10000001):
list1.append(i)
end = time.time()
print(f'append方法一共花费{end - start}秒')
start = time.time()
list2 = [i for i in range(1, 10000001)]
end = time.time()
print(f'列表推导式方法一共花费{end - start}秒')
打印结果:
append方法一共花费4.56853175163269秒
列表推导式方法一共花费1.8915929794311523秒
(二)语法一[表达式 for 变量 in 容器]:
for循环每执行一次,表达式就会将其生成的结果添加到列表中。
代码:
1.[表达式 for 变量 in 容器] # for循环每执行一次,表达式就会将其生成的结果添加到列表中。 num = [i for i in range(1, 101)] print(num) # 添加十个1 num_2 = [1 for _ in range(10)] print(num_2)
打印结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[表达式 for 变量 in 容器 if 条件]:
for循环执行一次,if分支判断一次,条件成立时表达式执行。
输出1-100的所有偶数
代码:
# 2.[表达式 for 变量 in 容器 if 条件] # for循环执行一次,if分支判断一次,条件成立时表达式执行。 list3 = [i for i in range(1, 101) if i % 2 == 0] print(list3)
输出结果:
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]
(四)语法三[表达式 for 变量 in 容器 for 变量 in 容器]
代码:
# 3.[表达式 for 变量 in 容器 for 变量 in 容器] list4 = [i for _ in range(3) for i in range(1,11)] print(list4)
输出结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
(五)练习题目:孪生数:两个素数的差等于2。找出100以内所有的孪生数。
代码:
list = []
for i in range(2, 101):
if i == 2:
print('2是素数')
list.append(2)
else:
# 判断2到x-1中有没有能将x整除的元素。
for j in range(2, i):
if i % j == 0:
# print(f'{i}不是素数')
break
else:
# print(f'{i}是素数')
list.append(i)
print('素数:', list)
for x in range(len(list) - 1):
if list[x + 1] - list[x] == 2:
print(f'{list[x]}和{list[x + 1]}是孪生数')
输出结果:
2是素数
素数: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
3和5是孪生数
5和7是孪生数
11和13是孪生数
17和19是孪生数
29和31是孪生数
41和43是孪生数
59和61是孪生数
71和73是孪生数
首先都要导入随机模块的包。
随机函数生成的都是随机的,不是固定的。
import random(一)randint(a, b), randrange()
randint(a, b): 从[a,b]闭区间中随机获取一个整数。
randrange(): 约等于randint + range。
import random # randint(a, b):从[a,b]闭区间中随机获取一个整数。 # randrange(): 约等于randint + range print(random.randrange(1, 4, 2))
输出结果:
3
(二)choice()choice():从容器中随机获取一个元素。
import random # choice():从容器中随机获取一个元素 print(random.choice([1, 2, 3, 4]))
输出结果:
2
(三)choices()choices(): 从容器中随机获取k个元素,有放回的抽取元素。
import random # choices(): 从容器中随机获取k个元素,有放回的抽取元素 print(random.choices([1, 2, 3, 4, 5], k=3))
输出结果:
[5, 3, 5]
(四)sample()sample(): 从有序容器中无放回的抽取k个元素。
import random # sample(): 从有序容器中无放回的抽取k个元素 print(random.sample([1, 2, 3, 4], k=3))
输出结果:
[4, 2, 3]
(五)shuffle()shuffle(): 将有序容器随机打乱顺序,无返回值。
import random # shuffle(): 将有序容器随机打乱顺序,无返回值 list = [1,2,3,4] print(random.shuffle(list)) # None print(list)
输出结果(随机的):
None
[3, 1, 2, 4]
import random
# 练习:课堂点名器
names = ['付永康', '廖宇', '罗梦佳', '夏博林']
random.shuffle(names)
result = random.choices(names, k = 1)
print(f'被抽中的同学为:{result}')
输出结果:
被抽中的同学为:[‘廖宇’]



