List and Tuple Tutorial 1

难度: 1

时长: 45 min


List 与 Tuple 的基本概念

List 与 序列

  1. 序列 是一种复合数据类型,由一组成员排序构成,如 [1,2,3,4]'China'

  2. 序列包含 List 和 Tuple 两种主要类型; (还包含 str, bytes, bytearray)[1]

  3. 其元素有编号(下标),如 a[2],即位置或索引;编号从0起, a[0] 是其首成员; 可以用负数索引,如 a[-1] :如果 a=[1,2,3,4], 那么 a[1], a[-1] 的值分别是什么? [2]

  4. List 的每个成员的类型可以不同,如: student = ['Tom', 42]。 不过为了简单,一般列表中的所有成员类型相同


Python List 图解

tuple 和 list 的联系与区别

联系: tuple 和 list都是序列类型

edward1 = ['Edward Gumby', 42]
edward2 = ('Edward Gumby', 42)

edward1 和 edward2 有何相同之处与不同之处?

区别:

  1. List可以修改,只读的Tuple (元组)不可修改;

  2. 能用 Tuple 的地方,就能用 List, List几乎在所有情况下可代替 tuple,但 List 开销更大一些

  3. Tuple一般用来做函数返回值

注意:

  1. 包含一个元素的 tuple 和 list 有点形式上的区别。如:在 A. [42,], B. (42,), C. [42] 和 D. (42) 中,哪些能正确表示 "只有一个元素的序列" ?

  2. 可带逗号结尾的语法规则有利于注释掉其中的成员不影响语法正确性

students = [
'张三',
'李四',
'王五',
]

基础通用序列操作

List 下标

  1. 索引 x[5], 切片 s[2:4]s[::], s[::-1]

  2. 相加 x+s;怎样相乘 ?

  3. 成员(包含)检查 in

  4. 支持迭代 ( for ... in)

  5. 支持内置方法/函数,如: 求长度、最大、最小元素、排序 sort()

切片

如果 x=[1,2,3,4,5],如何取出其中的部分成员,得到下面的结果:

  1. [1,2,3],

  2. [4,5],

  3. [5,4,3,2,1],

  4. [1,3,5],

  5. [5,3,1]

序列加法

执行下面的代码结果会是什么? 请根据结果总结序列加法的规则

序列乘法

执行下面的代码结果会是什么? 用一句话总结序列加法的规则

>>> [42] * 10
>>> 'python' * 5
>>> []+[]
>>> []*5 
>>> [None] * 10

[练习1]:序列切片

题目:给定列表 data = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

  1. 获取前3个元素

  2. 获取最后3个元素

  3. 获取第3到第7个元素(包含第3,不包含第7)

  4. 获取所有偶数位置的元素

  5. 将列表反转

[答案]

案例 1: 用户管理

目标: 通过此练习直接练习使用 List 的各种方法

如果有用户输入 username='scuec', password='2345',以及用户注册数据库 database

database = [['albert', '1234'],
            ['dilbert', '4242'],
            ['smith', '7524'],
            ['jones', '9843']]

['jones', '9843'] in database

使用 Python List 操作,完成以下功能:

  1. 怎么检验用户是否是合法用户? in

  2. 修改用户名

  3. 学生完成:修改密码

  4. 新用户注册 append

  5. 用户注销: del, remove

  6. 由用户查密码

  7. 用户排序: sort

  8. 密码排序

  9. 列出全部用户: for ... in

  10. 限制用户修改密码: tuple

  11. 密码存储加密 (hash)

List 赋值修改

怎样修改列表的部分成员值?

  • a = [1,2,3,4,5,6] , 将 a 的第1个,最后一个元素置0;

  • a 的最后一半置0

  • a 的偶数位置的元素置0

  • a 的奇数位置元素的值 *10 (也可以用 for in 语法)

a[i] = ...      # 修改1个成员
a[i:j] = ...    # 修改多个成员

索引与切片赋值应用

  1. 要将 ["p", "e", "r", "l"] 修改成 ["p", "e", "a", "r"],下面的4个方法中哪些正确,你你喜欢哪种方法?

#// 1
var = ["p", "e", "r", "l"]
var[-1] = "r"
var[-2] = "a"

#// 2
var = ["p", "e", "r", "l"]
var = var[:2] + ["r", "l"]

#// 3
var = ["p", "e", "r", "l"]
var[3:] = ["a", "r"]

#// 4
var = ["p", "e", "r", "l"]
var = list("".join(var).replace("rl", "ar"))
  1. [1, 5] 修改成 [1, 2, 3, 4, 5],下面的方法中哪个方法可行?

# (1)     
a[1]=[2,3,4]

# (2)    
a[1:1]=[2,3,4]

字符串与 list 相互转换

>>> alist = list('Hello')
>>> ''.join(alist)

练习: 将句子 "He's a very naughty boy!" 转成单词组成的 list

删除部分成员或全部

删除一个成员

删除 a :List 的第2个元素,哪个正确?

>>> a = [1,2,3,4,5,6]

>>> del a[2]        #// 1
>>> a[2:3] = []     #// 2
>>> a[2] = []       #// 3

删除全部成员

删除 a :List 的全部元素,哪个正确? 方法(1)列表切片赋值为空 和 方法(2)列表赋值为空有何区别? 用 id() 来探索

>>> a = [1,2,3,4,5,6]

>>> a[:]=[]     #(1)
>>> a=[]        #(2)