《Python语言程序设计》学习笔记
笔记选自《Python语言程序设计》[美]梁勇 著
本篇笔记没有记录用python绘画的turtle库
第10章 列表
- 创建列表
list1=list()
list2=list([2, 3, 4])
list3=list(["red", "green", "blue"])
list4=list(range(3, 6)) #3,4,5
list5=list("abcd")
可简写:
list1=[]
list2=[2, 3, 4,]
list3=["red", "green"]
一个列表既可以包含同样类型的元素也可以包括不同类型的元素
list4=[2, "three", 4]
- 列表和字符串一样,是一种序列类型,对字符串的序列操作同样适用于列表。
-
列表使用的函数:
len(list)
、max/min(list)
、sum(list)
返回列表中所有元素之和
random.shuffle(list)
随意排序列表中的元素 -
下标运算符
[]
myList[index] # index范围0到len(myList)-1
Python也允许使用负数作为下标来引用相对于列表末端的位置。将列表长度和负数下标相加就可以得到实际的位置。
list[-1]
和list[-1+len(list1)]
一样,它们都给出列表的最后一个元素。
-
列表截取
[start: end]
:返回列表的一个片段。这个片段是下标从start到end-1的元素构成的一个子列表。起始下标和结尾下标是可以省略的,这种情况下,起始下标为0而结尾下标是最后一个下标。 -
在截取过程中使用负数下标:
list1=[2,3,5,2,33,21]
list1[1:-3]
# 输出[3,5]
list1[1:-3]
和list1[1:-3+len(list1)]
一样。
-
如果start>=end,那么
list[start:end]
会返回一个空表。如果end指定了一个超出列表结尾的位置,那么Python会将使用列表长度代替end。 -
连接运算符(+)来组合两个列表
-
复制运算符(*)复制列表中的元素
-
in或者not in运算符判断一个元素是否在列表中
-
使用for循环遍历元素
# 对于mylist中的每个元素u,输出它
for u in mylist:
print(u)
以不同的顺序遍历列表或者改变列表中的元素,那么仍然必须使用下标变量。
for i in range(0, len(myList), 2):
print(myList[i])
-
比较列表
使用比较运算符对列表进行比较,两个列表必须包含同样类型的元素,使用字典顺序比较每个元素。 -
列表解析:提供一种创建顺序元素列表的简洁方式,方括号内包含后跟一个for子句的表达式,之后是0或多个for或if子句。列表解析可以产生一个由表达式求值结果组成的列表。
list1=[x for x in range(5)] # 返回[0,1,2,3,4]
list2=[0.5*x for x in list1] # 返回[0.0, 0.5, 1.0, 1.5, 2.0]
list3=[x for x in list2 if x<1.5] # 返回[0.0, 0.5, 1.0]
列表方法:一旦列表被创建,可以使用list类的方法来操作列表。
方法 | 解释 |
---|---|
append(x: object): None | 将元素x添加到列表结尾 |
count(x: object): int | 返回元素x在列表中的出现次数 |
extend(l: list): int | 返回元素x在列表中第一次出现的下标 |
insert(index: int, x: object): None | 将元素x插入列表中指定下标处。删除给定位置的元素并返回它。参数i不指定时,则删除并返回列表最后一个元素 |
pop(i): object | 删除并返回列表最后一个元素 |
remove(x: object): None | 删除列表中第一次出现的x |
reverse(): None | 将列表中的所有元素倒序 |
sort(): None | 以升序对列表中的元素排序 |
- 将字符串分成列表:
split()
方法
items="Jane John Peter Susan".split()
将字符串items分离成列表['Jane', 'John', 'Peter', 'Susan']
,字符串中的条目是被空格分隔的。
也可以使用非空格的限定符
items="09/20/2012".split("/")
被分离成['09', '20', '2012']
· 复制列表
浅拷贝:它仅仅是将list1引用值赋值给list2。在这条语句后,list1和list2都将指向同一个列表。list2之前指向的列表将不再被引用,它就变成了垃圾,所占用的内存空间将被自动收集起来被Python编译器重新使用。
list2=list1
深拷贝:将list1完全相同的复制给list2
list2=[x for x in list1]
# 或简化为
list2=[]+list1
- 将列表传递给函数:由于列表是一个可变对象,所以列表的内容可能会在函数调用后改变。
- 从函数返回一个列表:当函数返回一个列表时,就会返回这个列表的引用值。
本章总结
- 可以利用Python内置的
len
、max
、min
和sum
函数返回一个列表的长度、列表的最大值和最小值以及列表中所有元素之和。 - 可以使用random模块中的
shuffle
函数将一个列表中的元素打乱。 - 可以使用下标运算符
[]
来引用列表中的一个独立元素。 - 程序员常常会错误地用下标1来引用列表中的第一个元素,但它应该是0。这被称为下标出1错误。
- 可以使用连接操作符
+
来连接两个列表,使用复制运算符*
来复制元素,使用截取运算符[:]
获取一个子列表,使用in
和not in
运算符来检查一个元素是否在列表中。 - 可以使用
for
循环来遍历列表中的所有元素。 - 可以使用比较运算符来比较两个列表中的元素。
- 一个列表对象是可变的。可以使用方法
append
、extend
、insert
、pop
和remove
向一个列表添加元素和从一个列表删除元素。 - 可以使用
index
方法获取列表中一个元素的下标,使用count
方法来返回列表中元素的个数。 - 可以使用
sort
和reverse
方法来对一个列表中的元素进行排序和翻转。 - 可以使用
split
方法来将一个字符串分离成列表。 - 当调用一个带列表参数的函数时,列表的引用则被传递给这个函数。
- 如果一个列表已经排好序,那么在列表中查找一个元素时二分查找比线性查找效率更高。
- 选择排序将列表中的最小元素和第一个元素交换。然后找到剩余元素中最小的元素并与剩余元素的第一个交换,以此类推,直到只剩一个元素为止。
- 插入排序算法重复地将一个新元素插入排好序的子列表中,直到整个表排好序为止。
关键术语
英文 | 中文 |
---|---|
anonymous list | 匿名列表 |
binary searches | 二分查找 |
garbage collection | 垃圾回收 |
index | 下标 |
insertion sort | 插入排序 |
linear searches | 线性查找 |
selection sort | 选择排序 |