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 对象与值(重点)
# 字符串: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 术语表(精简速记)
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