列表与元组
对应教学日历:讲次 5-6
一、列表(List)
定义
- 能保存任意数量任意类型的Python对象
- 用中括号
[]包裹,元素用逗号分隔 - 第一个元素索引为
0,最后一个为-1 - 元素的个数及值可以改变(动态的)
aList = ["red", "blue", "green", "yellow"]
aList[-2] # 'green'
aList[2::] # ['green', 'yellow']
aList[1] = "pink" # 修改元素
del aList[0] # 删除元素列表函数
| 函数 | 功能 |
|---|---|
list() | 新建空列表 |
len(L) | 返回列表长度 |
max(L) | 返回最大元素 |
min(L) | 返回最小元素 |
sum(L) | 返回所有元素总和 |
sorted(L) | 返回排序后的新列表 |
列表方法
| 方法 | 功能 |
|---|---|
append(x) | 末尾添加元素 |
insert(i, x) | 在第i个位置插入元素x |
pop(i) | 移除第i个元素并返回 |
pop() | 移除最后一个元素并返回 |
remove(x) | 删除第一个值为x的元素 |
count(x) | 返回x出现的次数 |
sort(reverse=False) | 原地排序 |
clear() | 清空列表 |
score = [60, 70, 60, 60, 70, 90]
score.remove(score[-2]) # 删除倒数第2个(值为70)
# 结果:[60, 60, 60, 60, 90]列表推导式
t = [i for i in range(100)] # [0, 1, ..., 99]
t = [i for i in range(100) if i % 5 == 0] # [0, 5, 10, ..., 95]
sum(t) # 950列表应用
# 班级学生判断
aList = ["李文", "张一飞", "林诗怡", "田翰", "袁立"]
name = input("请输入您的姓名:")
if name in aList:
print("欢迎您,{}同学".format(name))
else:
print("对不起,{}不是本班同学".format(name))二、元组(Tuple)
定义
- 用小括号
()包裹 - 元素的个数及值不可以改变(不可变)
- 访问速度比列表快
aTuple = ('+', '-', '*', '/')
aTuple[0] # '+'
aTuple[1:3] # ('-', '*')
aTuple[::2] # ('+', '*')创建方法
t1 = () # 空元组
t2 = (1, 2, 3) # 包含三个元素
t3 = (1,) # 包含一个元素(注意逗号!)
t4 = tuple([1, 2, 3]) # 列表转元组
t5 = 1, 2, 3 # 元组打包
name, age = ("Jack", 28) # 元组解包元组运算
(1, 2) + (3, 4) # (1, 2, 3, 4) 元组拼接
(1, 2) * 3 # (1, 2, 1, 2, 1, 2) 元组复制元组 vs 列表
| 特性 | 列表 | 元组 |
|---|---|---|
| 符号 | [] | () |
| 可变性 | 可变 | 不可变 |
| 速度 | 较慢 | 较快 |
| 用途 | 需要修改的序列 | 不需要修改的序列 |
三、学号姓名合并
merge = []
code = ["2010181", "2010912", "2011073"]
name = ["李文", "张一飞", "林诗怡"]
for i in range(len(code)):
merge.append((code[i], name[i]))
for e in merge:
print(e)要点:
range(len(code))生成索引序列(code[i], name[i])创建元组
作业示例
生成素数列表
aList = []
for i in range(2, 100):
flag = 1
for j in range(2, i):
if i % j == 0:
flag = 0
break
if flag == 1:
aList.append(i)
print(aList)生成不重复的30个两位数
import random
aList = []
count = 1
while count <= 30:
n = random.randint(10, 99)
if n not in aList:
aList.append(n)
count += 1
for i in aList:
print(i, end=' ')要点:
n not in aList判断是否不重复while循环直到凑够30个
作业重点
- 列表是可变序列,元组是不可变序列
- 单元素元组必须加逗号:
(1,) append()在末尾添加,insert(i, x)在指定位置插入pop()移除并返回,remove(x)删除第一个匹配项- 列表推导式
[i for i in range(n) if 条件] in和not in判断元素是否在列表/元组中- 元组解包
a, b = (1, 2)