当前位置:首页>python>Python 列表完全指南:从入门到精通|《Think Python》第9章

Python 列表完全指南:从入门到精通|《Think Python》第9章

  • 2026-10-11 08:35:59
Python 列表完全指南:从入门到精通|《Think Python》第9章

Python 列表完全指南:从入门到精通

📋 序列之王:列表创建、增删改查、排序、引用、别名、函数传参全掌握


9. 列表(Lists)

列表是 Python 最常用、最实用的数据类型。 本章你将彻底学会:

  • 列表的定义与索引
  • 可变性与切片
  • 增删改查方法
  • 列表与字符串互转
  • 遍历与排序
  • 对象、引用、别名
  • 列表做函数参数
  • 构建单词表
  • 常见坑与调试

9.1 列表是一种序列

和字符串一样,列表是有序序列,但列表能装任意类型的数据:数字、字符串、列表、对象等。

创建列表

# 数字列表numbers = [42, 123]# 字符串列表cheeses = ['Cheddar', 'Edam', 'Gouda']# 混合类型(甚至嵌套列表)t = ['spam', 2.0, 5, [10, 20]]# 空列表empty = []

长度 len()

print(len(cheeses))

运行结果:

3

9.2 列表是可变的(Mutable)

列表最大特点:可以直接修改里面的元素,字符串做不到。

索引取值/赋值

numbers = [42, 123]# 修改第 2 个元素(索引1)numbers[1] = 17print(numbers)

运行结果:

[42, 17]

负索引

# 最后一个元素print(cheeses[-1])

运行结果:

Gouda

in 判断成员

print('Edam'in cheeses)print('a'in t)

运行结果:

TrueFalse

9.3 列表切片

和字符串切片完全一样:[开始:结束],含头不含尾。

letters = ['a', 'b', 'c', 'd']# 索引1~2print(letters[1:3])# 从头开始print(letters[:2])# 到结尾结束print(letters[2:])# 复制整个列表print(letters[:])

运行结果:

['b', 'c']['a', 'b']['c', 'd']['a', 'b', 'c', 'd']

9.4 列表运算

t1 = [1, 2]t2 = [3, 4]# 拼接print(t1 + t2)# 重复print(['spam'] * 4)# 求和、最小、最大print(sum(t1))print(min(t1))print(max(t2))

运行结果:

[1, 2, 3, 4]['spam', 'spam', 'spam', 'spam']314

9.5 列表常用方法(必背)

增加元素

letters = ['a', 'b', 'c', 'd']# 末尾加一个letters.append('e')print(letters)# 末尾加一整组letters.extend(['f', 'g'])print(letters)

运行结果:

['a', 'b', 'c', 'd', 'e']['a', 'b', 'c', 'd', 'e', 'f', 'g']

删除元素

t = ['a', 'b', 'c']# 按索引删除,返回被删元素removed = t.pop(1)print(t)print("被删:", removed)# 按元素删除,无返回值t.remove('a')print(t)

运行结果:

['a', 'c']被删: b['c']

9.6 列表 ↔ 字符串 互转

字符串 → 列表

s = 'spam'# 拆成字符列表print(list(s))# 拆成单词列表s = 'pining for the fjords'print(s.split())# 指定分隔符s = 'ex-parrot'print(s.split('-'))

运行结果:

['s', 'p', 'a', 'm']['pining', 'for', 'the', 'fjords']['ex', 'parrot']

列表 → 字符串

words = ['pining', 'for', 'the', 'fjords']# 用空格连接sentence = ' '.join(words)print(sentence)# 无缝连接print(''.join(words))

运行结果:

pining for the fjordspiningforthefjords

9.7 遍历列表

最常用的两种方式:

直接遍历元素

cheeses = ['Cheddar', 'Edam', 'Gouda']for cheese in cheeses:print(cheese)

运行结果:

CheddarEdamGouda

遍历单词(先拆分)

s = 'pining for the fjords'for word in s.split():print(word)

9.8 列表排序

sorted() → 返回新列表,不改动原列表

scramble = ['c', 'a', 'b']print(sorted(scramble))print(scramble)

运行结果:

['a', 'b', 'c']['c', 'a', 'b']

字符串排序

s = 'letters'print(''.join(sorted(s)))

运行结果:

eelrstt

9.9 对象与值(重点)

  • 等价(equivalent):内容一样
  • 同一(identical):是同一个对象
# 字符串:Python 会优化成同一个对象a = 'banana'b = 'banana'print(a is b)# 列表:即使内容一样,也是两个对象a = [1, 2, 3]b = [1, 2, 3]print(a is b)

运行结果:

TrueFalse

9.10 别名(Aliasing)—— 最容易踩坑

a = b 时,两个变量指向同一个列表对象。 改一个,另一个也变!

a = [1, 2, 3]b = a# 修改 bb[0] = 5# a 也跟着变!print(a)print(b)print(a is b)

运行结果:

[5, 2, 3][5, 2, 3]True

 避免别名:复制列表

b = a[:]# 或b = list(a)

9.11 列表作为函数参数

传给函数的是引用,函数内修改列表,外面也会变。

defpop_first(lst):# 删除第一个元素return lst.pop(0)letters = ['a', 'b', 'c']pop_first(letters)print(letters)

运行结果:

['b', 'c']

9.12 构建单词表(高效用法)

只读取一次文件,存入列表,反复使用。

word_list = []for line inopen('words.txt'):    word = line.strip()    word_list.append(word)print(len(word_list))

运行结果:

113783

更简短写法:

word_list = open('words.txt').read().split()

9.13 调试(超级重要)

✅ 列表方法大多返回 None,不返回新列表!

错误写法:

t = [1, 2, 3]t = t.remove(3)# t 变成 None!

正确写法:

t = [1, 2, 3]t.remove(3)

9.14 术语表(精简速记)

英文
中文
说明
list
列表
有序可变序列
element
元素
列表里的每一项
nested list
嵌套列表
列表里放列表
mutable
可变
可直接修改
alias
别名
多个变量指向同一对象
reference
引用
变量指向对象的关系

9.15 练习题(带标准答案)

9.15.2 判断变位词 is_anagram

defis_anagram(word1, word2):"""判断两个单词是否为变位词(字母相同,顺序不同)"""returnsorted(word1.lower()) == sorted(word2.lower())print(is_anagram('stop', 'tops'))

运行结果:

True

9.15.3 判断回文 is_palindrome

defreverse_word(word):return''.join(reversed(word))defis_palindrome(word):return word.lower() == reverse_word(word).lower()print(is_palindrome('rotator'))

运行结果:

True

9.15.4 反转句子 reverse_sentence

defreverse_sentence(s):    words = s.split()    words.reverse()return' '.join(words)print(reverse_sentence("Reverse this sentence"))

9.15.5 总长度 total_length

deftotal_length(word_list):    total = 0for word in word_list:        total += len(word)return total

最新文章

随机文章