列表与元组

对应教学日历:讲次 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 条件]
  • innot in 判断元素是否在列表/元组中
  • 元组解包 a, b = (1, 2)